2015-02-07 125 views
1

我有一個簡單的ajax請求來加載更多的職位。我正在考慮在調用一個「加載更多」ajax請求以防止多次調用「加載更多」時使用鎖。計劃是在調用ajax請求方法時鎖定它,並在使用request.done或request.fail方法返回時釋放該鎖。 有沒有什麼情況下,jQuery ajax請求沒有調用其中的任何一種方法(例如短暫的Internet連接丟失)?jQuery ajax請求是否總是調用done或fail方法?

回答

1

在所有的包裝下,jQuery的ajax只是一個XMLHttpRequest。一個XMLHttpRequest可以處於以下狀態之一:

  • UNSENT(數值0):該對象已經構造。 (數值1):open()方法已成功調用,並且可以使用send()方法進行請求。

  • HEADERS_RECEIVED(數值2):所有重定向(如果有的話)都已被遵循,並且已收到最終響應的所有HTTP標頭。該對象的幾個響應成員現在可用。

  • LOADING(數值3):正在接收響應實體正文。

  • DONE(數值4):數據傳輸已完成或傳輸過程中出現問題(例如無限重定向)。

基本上你問如果有當DONE後請求是OPENED永遠達不到的情況下。

如果有無限重定向,我們將從HEADERS_RECEIVED跳到DONE(狀態爲失敗),並且請求已完成。
如果重定向成功,我們繼續LOADING,如果數據成功接收,則將繼續到DONE

但是,如果數據從未收到,我們仍在等待呢? XMLHttpRequest有一個屬性timeout,它指定在請求超時後失敗多少毫秒。然而,根據this question,jQuery 不是爲它提供了一個默認的非空值(我沒有自己檢查過它,答案可能已經過時,您將不得不引用最新的源代碼)。有些瀏覽器具有內置的超時默認值,但它們因供應商而異。

因此,如果您沒有手動配置超時,則可能是,儘管不太可能,請求仍然無限期地掛起。因此,實施故障安全超時是明智的。

相關問題