2013-04-25 98 views
12

因爲我已經聲明成功和錯誤的ajax選項,其中響應是204,ajax方法去選項成功,這導致錯誤。如何在jquery ajax中處理204響應?

根據我們可以使用的文檔,我們可以使用StatusCode或Complete方法,但這裏的缺點是必須聲明所有的狀態碼,如2?系列,3?系列,4?系列!由於這些響應是動態的,我不確定http狀態碼。

那麼,哪個更好的方式來處理jQuery Ajax中的http狀態碼?

回答

13

作爲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

4

上面的解決方案是一個很好的解決方案,但對於已經在許多組件上定義了「成功」和「錯誤」的人來說,這涉及很多代碼的變化。

的文檔的閱讀之後,就比較容易成功獲取狀態代碼太:

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將做的伎倆