由于我已经声明了成功和错误 ajax 选项,其中响应为 204,因此 ajax 方法转到选项成功,这会导致错误。
根据我们可以使用的文档,StatusCode 或 Complete 方法,但这里的缺点是必须声明所有状态代码,如 2?? 系列,3?? 系列,4?? 系列!由于这些响应是动态的,我不确定 http 状态代码。
那么,在 jquery ajax 中处理 http 状态码的更好方法是什么?
由于我已经声明了成功和错误 ajax 选项,其中响应为 204,因此 ajax 方法转到选项成功,这会导致错误。
根据我们可以使用的文档,StatusCode 或 Complete 方法,但这里的缺点是必须声明所有状态代码,如 2?? 系列,3?? 系列,4?? 系列!由于这些响应是动态的,我不确定 http 状态代码。
那么,在 jquery ajax 中处理 http 状态码的更好方法是什么?
从 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);
});
上面的解决方案是一个很好的解决方案,但是对于已经在许多组件上定义“成功”和“错误”的人来说,这涉及到大量的代码更改。
阅读文档后,也很容易获得成功的状态代码:
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就可以了