19

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

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

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

4

2 回答 2

19

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

jqXHR.done(函数(数据, textStatus, jqXHR) {}); 成功回调选项的替代构造,.done() 方法替换了已弃用的 jqXHR.success() 方法。有关实现细节,请参阅 deferred.done()。 关联

    $.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); 
});
于 2013-04-25T16:30:05.033 回答
11

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

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

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就可以了

于 2014-05-30T21:43:24.047 回答