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

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

问题描述:

因为我已经声明成功和错误的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); 
}); 
+0

你能解释我的jqXHR.done方法与任何例子?如何处理状态码? – 2013-04-25 16:40:24

+0

我提供了一个小提琴,展示了如何测试状态代码。您如何处理它取决于您正在构建的应用程序的上下文。 – 2013-04-25 17:05:55

+0

上面的done方法是否仅处理已弃用的jqXHR.success()方法?对于错误处理,我是否需要创建单独的方法? Bcoz我试图通过更改URL来玩弄jsfiddle,并且它不处理错误代码! – 2013-04-25 17:09:06

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

的文档的阅读之后,就比较容易成功获取状态代码太:

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将做的伎俩