如何在jquery ajax中处理204响应?

时间:2013-04-25 16:03:38

标签: jquery

由于我已声明成功和错误ajax选项,其中响应为204,因此ajax方法会转到选项成功,从而导致错误。

根据我们可以使用的文档,StatusCode或Complete方法,但这里的缺点是必须声明所有状态代码如2 ??系列,3 ??系列,4 ??系列!由于这些响应是动态的,我不确定http状态代码。

那么,这是在jquery ajax中处理http状态代码的更好方法吗?

2 个答案:

答案 0 :(得分:17)

jQuery 1.5中$ .ajax()返回的jqXHR对象实现了Promise接口。 done函数中的第三个参数是jqXHR对象。此对象具有结果的http状态代码的属性。

  

jqXHR.done(function(data,textStatus,jqXHR){});替代   构造成功回调选项,.done()方法替换   不推荐使用的jqXHR.success()方法。请参阅deferred.done()   实施细节。   link

    $.ajax({
      url: "http://fiddle.jshell.net/favicon.png",
      beforeSend: function ( xhr ) {
          xhr.overrideMimeType("text/plain; charset=x-user-defined"); 
      }
    }).done(function ( data, textStatus, jqXHR) {
       console.log(jqXHR.status); //handle your 204 or other status codes here
    });

小提琴http://jsfiddle.net/puleos/fVa7X/

假设您要将所有非200状态代码视为错误,您可以执行以下操作:

var p = $.ajax({
          url: "http://fiddle.jshell.net/favicon.png",
          beforeSend: function ( xhr ) {
             xhr.overrideMimeType("text/plain; charset=x-user-defined"); 
          }
        });

p.done(function(data, textStatus, jqXHR) {
  if(jqXHR.status !== 200) {
     handleError(jqXHR.status);
     return;
  }
  // Normal processing here
});

p.fail(function(jqXHR, textStatus) {
   handleError(jqXHR.status); 
});

答案 1 :(得分:8)

上面的解决方案是一个很好的解决方案,但对于已经在许多组件上定义“成功”和“错误”的人来说,这涉及到很多代码更改。

阅读完文档后,很容易获得成功的状态代码:

jQuery.ajax({
..
'success' : function(data,textStatus,jqXHR) {
    if (jqXHR.status == "204") {

    }
},
error : function(jqXHR, exception) {
        // Manage error 
    },

http://api.jquery.com/jquery.ajax/ =>的StatusCode

然后检查状态代码, jqXHR.status 就可以了。