2013-03-04 57 views
5

假設我有一個稍微長時間運行的jQuery Ajax調用(比如5秒)如下:如何判斷JQuery的錯誤意味着通話被中斷

$.ajax({ 
    url: '/LongCall', 
    type: 'POST', 
    async: true, 
    cache: false, 
    datatype: 'json', 
    success: function(data) { 
     alert('Success!'); 
    }, 
    error(xhr, textStatus, errorThrown) { 
     alert('Error!'); 
    } 
}); 

現在假設在等待我的五個第二個進程運行用戶越來越不耐煩,決定在我的頁面上點擊某種導航。上述調用會發生什麼情況是用戶在點擊鏈接時收到錯誤警報。

如果確實存在錯誤,我確實希望顯示錯誤警報,但如果發生的只是用戶決定導航,我不希望顯示錯誤警報。我怎樣才能做到這一點?

換句話說,是否有一些值我可以檢查(xhr.status也許?),它會告訴我發生的錯誤只是過程中斷,所以我可以知道忽略錯誤?

謝謝!

+1

檢查錯誤回調的第二個和第三個參數。 – 2013-03-04 23:00:52

+0

第二個參數是「錯誤」。第三個說法是「」。根據我所能說的,在這種情況下,這兩者都不是有用的。 – 2013-03-04 23:59:16

+0

在這種情況下,查看第一個參數的屬性。 – 2013-03-05 00:01:32

回答

8

儘可能靠近我可以告訴大家,要做到這一點,最好的辦法是檢查xhr.readyState你錯誤處理器。任何小於4的值都表示該進程仍在運行,這意味着瀏覽器正在發生中斷它的事情。

您還想調用xhr.abort()來嘗試停止ajax進程,以便用戶在導航實際發生之前不必等待它完成,但對於我調用xhr.abort( )實際上並沒有加快速度。

$.ajax({ 
    url: '/LongCall', 
    type: 'POST', 
    async: true, 
    cache: false, 
    datatype: 'json', 
    success: function(data) { 
     alert('Success!'); 
    }, 
    error(xhr, textStatus, errorThrown) { 
     if (xhr.readyState < 4) { 
      xhr.abort(); 
     } 
     else { 
      alert('Error!'); 
     } 
    } 
}); 
3

documentation,我會大膽地猜測你的錯誤處理程序應該是這樣的:

error(xhr, textStatus, errorThrown) { 
    if(textStatus != "abort") { 
     alert("Error!"); 
    } 
} 
+0

這就是我的想法,但實際上,如果我檢查狀態,當錯誤是中斷時,它是「錯誤」。 – 2013-03-04 23:58:04

+0

'errorThrown'說什麼? – 2013-03-04 23:59:18

+0

見上。它是空的字符串。 – 2013-03-05 00:23:37