2011-02-13 50 views
3

我目前正在學習一種有點模糊的外語,所以我製作了一個簡單的網站(http://ianburris.com/armenian/),以便我可以輕鬆地查找課堂中使用的書籍中的單詞。我注意到的一件事是,有時如果我輸入類似「house」的內容,匹配「h」的單詞的請求將在請求「ho」之後完成,因此「h」的結果將覆蓋「ho 」。如果你輸入一個單詞,然後非常快地打回退格,這一點尤其明顯。清除所有字符後,我的消息顯示「輸入英文單詞」將彈出一秒,然後最後一個AJAX請求最終完成覆蓋消息。有沒有一種方法可以實質上取消AJAX調用,或者是否應該包含一個時間戳,我可以用它來拋出過時的結果?使用jQuery AJAX調用防止「競爭條件」

回答

5

保持一個變量來標識正在進行的ajax調用的訂單號碼,例如 。第一個電話爲1,第二個電話爲2,第三個字母爲ajax。 並且每當Ajax請求完成時,檢查輸入框的值的當前字符串長度。 如果它們匹配,則數據有效,將其寫入您的頁面,否則拒絕它。

例如:具有值3 AJAX請求完成,因爲hou.length == 3在輸入框=「後」, 電流值,這是一個正確的匹配,並且數據可被處理。

+1

可能還需要存儲一系列正在運行的值(如果需要進行高級監控)和/或最後一個值本身 - 如果在XHR回調關閉中捕獲,這很容易實現。有時候長度會導致誤報:「侯」和「少」。 – 2011-02-13 21:16:04

+0

@pst是的,謝謝你指出。 – DhruvPathak