如何在jquery ajax中处理204响应?
由于我已声明成功和错误ajax选项,其中响应为204,ajax方法转到选项成功,这会导致错误。
根据我们可以使用的文档,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()。 链接
$.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就可以了