因爲我已經聲明成功和錯誤的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