2013-06-28 60 views
0

我正在尝试处理来自jQuery的ajax调用的响应正文,但迄今为止没有成功。jQuery ajax():无法处理响应

这里是我的jQuery代码:

function doAjaxClosedStatus(url, requestId, closedStatusId) { 
$.ajax({ 
    type: "POST", 
    url : url+requestId, 
    data : ({ 
     'closedStatusId' : closedStatusId 
    }) 
}).success(function(msg) { 
    alert(msg); 
    if (msg == "fail") { 
     alert("test"); 
     $(document).append($('<div class="alert alert-error affix" data-offset-top="200">You can\'t specify a closed status if status is not set as "closed"</div>')); 
     $('option:selected', '.closedStatus ').removeAttr('selected'); 
     $('.closedStatus option:first-child').prop('selected', 'selected'); 
    } 
}); 

}

所以整个呼叫和服务器端的处理工作就像一个魅力,并用“完成”或“失败”,分别时,一切响应是对还是错(我知道你猜对了)。现在我想做一些客户端处理,当回应是失败,但alert(msg)从未触发... 我在做什么错了?

编辑:我忘记说了,我在使用Spring MVC作为后端和我只是在“失败”为@ResponseBody。当我检查网络流时,响应主体是“失败”或“完成”。

EDIT2:我试着用:

$.ajax({ 
    type: "POST", 
    url : url+requestId, 
    data : ({ 
     'closedStatusId' : closedStatusId 
    }), 
    success:function(msg) { 
     alert(msg); 
     if (msg == "fail") { 
      alert("test"); 
      $(document).append($('<div class="alert alert-error affix" data-offset-top="200">You can\'t specify a closed status if status is not set as "closed"</div>')); 
      $('option:selected', '.closedStatus ').removeAttr('selected'); 
      $('.closedStatus option:first-child').prop('selected', 'selected'); 
     } 
    } 
}); 

仍然没有成功...

EDIT3: 所以我一直试图再次这样:

function doAjaxClosedStatus(url, requestId, closedStatusId) { 
$.ajax({ 
    type: "POST", 
    url : url+requestId, 
    data : ({ 
     'closedStatusId' : closedStatusId 
    }), 
    success:function(msg) { 
     alert(msg); 
     if (msg == "fail") { 
      alert("test"); 
      $(document).append($('<div class="alert alert-error affix" data-offset-top="200">You can\'t specify a closed status if status is not set as "closed"</div>')); 
      $('option:selected', '.closedStatus ').removeAttr('selected'); 
      $('.closedStatus option:first-child').prop('selected', 'selected'); 
     } 
    } 
}); 

}

由于某种原因,它现在可以工作。也许这是因为我的浏览器的缓存没有被清空,因此与我的脚本的旧版本工作。无论如何,现在这是正常工作。除了我的DOM操作,但这不属于问题本身,所以主题关闭!感谢大家!

+0

<<也许这是因为我的浏览器的缓存不被清空>>这可以解释一切;) –

+0

^^^^^发生在我们身上的所有,发布它作为自己的回答 - >“愚蠢我没有击中CTRL-F5“,并接受它,你会得到更多的代表。 – adeneo

回答

2

你不能链success,它的内$就一个方法,你可能在想的done()

function doAjaxClosedStatus(url, requestId, closedStatusId) { 
    $.ajax({ 
     type: "POST", 
     url : url+requestId, 
     data : {closedStatusId : closedStatusId} 
    }).done(function(msg) { 
     if ($.trim(msg) == "fail") { 
      alert("test"); 
      $(document).append($('<div class="alert alert-error affix" data-offset-top="200">You can\'t specify a closed status if status is not set as "closed"</div>')); 
      $('option:selected', '.closedStatus ').removeAttr('selected'); 
      $('.closedStatus option:first-child').prop('selected', 'selected'); 
     } 
    }); 
} 
+0

我尝试使用done()之前,仍然没有结果,为了尝试,我只是改成了success(),我的错误。 –

+0

@MichaelDeKeyser - 使用什么版本的jQuery? – adeneo

+0

jqXhr的成功已被弃用,但未被删除,因此OP的代码应该与done()相同() –

0

从它看起来像.success函数的代码在$ .ajax之外。

它应该是这样的

$.ajax({ 
    type: "POST", 
    url : url+requestId, 
    data : ({ 
     'closedStatusId' : closedStatusId 
    }), 
.success(function(data) { 
    alert(data); 
    if (data == "fail") { 
     alert("test"); 
     $(document).append($('<div class="alert alert-error affix" data-offset-top="200">You can\'t specify a closed status if status is not set as "closed"</div>')); 
     $('option:selected', '.closedStatus ').removeAttr('selected'); 
     $('.closedStatus option:first-child').prop('selected', 'selected'); 
    } 
}); 

,并确保您的服务器发送一些数据。在PHP回声结果的情况下。

+0

语法错误!!! – adeneo

+0

确实有语法错误。 –

+0

我认为'函数(数据)'应该是'函数(味精)'。 –

2
var request = $.ajax({ 
    type: "POST", 
    url : url+requestId, 
    data : ({'closedStatusId' : closedStatusId}); 

request.done(function(msg) { 
    alert("yes"); 
}); 

request.fail(function(jqXHR, textStatus) { 
    alert("Request failed: " + textStatus); 
}); 

这对我来说

+0

尝试过,仍然不适合我:( –

+0

这很奇怪,因为这个代码应该在任何情况下使用失败和完成 –

+0

是的,我不知道为什么它也没有工作正如我所说,也许我的缓存wasn没有正确清空(使用CTRL + R),因此我正在使用我的脚本的旧版本:( –

0

你的代码实际工作是什么在起作用对我而言,但我有一些为什么会失败的理论。

  1. 响应的MIME类型可能导致jquery错误地将响应解释为XML(例如),然后无法解析它。你可以通过硬编码dataType来解决这个问题。

    dataType : 'text', 
    
  2. 您正在尝试连接到服务器上的不同的域,以便你得到一个跨浏览器的脚本错误。您可以通过在服务器上设置Access-Control-Allow-Origin标头来解决该问题。一种方法是通过这样的.htaccess文件。

    Header set Access-Control-Allow-Origin "*"