因为我已经声明成功和错误的ajax选项,其中响应是204,ajax方法去选项成功,这导致错误。如何在jquery ajax中处理204响应?
根据我们可以使用的文档,我们可以使用StatusCode或Complete方法,但这里的缺点是必须声明所有的状态码,如2?系列,3?系列,4?系列!由于这些响应是动态的,我不确定http状态码。
那么,哪个更好的方式来处理jQuery Ajax中的http状态码?
因为我已经声明成功和错误的ajax选项,其中响应是204,ajax方法去选项成功,这导致错误。如何在jquery ajax中处理204响应?
根据我们可以使用的文档,我们可以使用StatusCode或Complete方法,但这里的缺点是必须声明所有的状态码,如2?系列,3?系列,4?系列!由于这些响应是动态的,我不确定http状态码。
那么,哪个更好的方式来处理jQuery Ajax中的http状态码?
作为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);
});
上面的解决方案是一个很好的解决方案,但对于已经在许多组件上定义了“成功”和“错误”的人来说,这涉及很多代码的变化。
的文档的阅读之后,就比较容易成功获取状态代码太:
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将做的伎俩
你能解释我的jqXHR.done方法与任何例子?如何处理状态码? – 2013-04-25 16:40:24
我提供了一个小提琴,展示了如何测试状态代码。您如何处理它取决于您正在构建的应用程序的上下文。 – 2013-04-25 17:05:55
上面的done方法是否仅处理已弃用的jqXHR.success()方法?对于错误处理,我是否需要创建单独的方法? Bcoz我试图通过更改URL来玩弄jsfiddle,并且它不处理错误代码! – 2013-04-25 17:09:06