我們的Web應用程序中的一個頁面大約每10秒鐘對新數據進行輪詢,使用jQuery的ajax()
方法。我們通常有幾百個用戶同時查看此頁面,因此我們的服務器每秒接收幾個請求。負載不是任何問題。jQuery ajax()調用偶爾會導致XmlHttpRequest響應狀態爲0的錯誤
對於我們訪問者的一小部分,jQuery ajax()
調用非常觸發它是錯誤事件。這些錯誤事件中的大部分都是明顯的錯誤(例如訪問者遇到網絡問題時的超時),但是這些錯誤事件中的一小部分我很難找到原因,而且我有點困惑。
我們連線了一個全球性的錯誤監聽像這樣
$.ajaxSetup({
timeout: oursettings.timeout,
error: function(xhr, status, e){
// error handling goes here
}
});
錯誤的這個特定子集,jQuery是扔我們的"error"
一個status
。當XmlHttpRequest readystate的值爲4
(意味着它是DONE
)並且HTTP響應狀態在成功值之外(< 200
或>= 300
)時,通過jQuery source code(特別是第3574行)讀取錯誤僅以此值拋出。 。
但是,當我們檢查XmlHttpRequest對象本身時,我們發現它的(HTTP響應)狀態爲0
。根據XHR規範,當the "error flag is true"時應設置爲0的狀態。
這是我得到真的很困惑,但因爲the only other thing這對「錯誤標誌」的XmlHttpRequest的規範狀態是
完成狀態具有指示某種類型的網絡錯誤或相關聯的錯誤標誌流產。它可以是真或假,並具有假的初始值。
該規範沒有說明什麼屬性或這個錯誤標誌保留在哪裏(即它是否可用xhr.error
?)。
所以我想我的問題歸結爲:這將是正確的我們的Ajax的錯誤處理代碼假設擊中我們的錯誤處理程序與"error"
一個jQuery狀態和0
一個xhr.status
任何事件所引起只有通過「network error or abortion」?
是否有任何其他條件或任何其他人已經看到可能導致XmlHttpRequest readystate爲DONE (4)
的HTTP響應狀態爲0?我希望能夠排除服務器端錯誤的任何可能性(因爲我們的服務器端日誌沒有顯示任何內容),並且改變錯誤處理邏輯以不將這種情況視爲致命錯誤(導致用戶看到一堆大紅色警報類型的錯誤消息)。
還有更多,請參閱http://stackoverflow.com/a/14507670/700206 – Lee