4
我有一個自定義的JavaScript自動完成腳本,命中與多個異步阿賈克斯請求的服務器。 (每次鍵被按下。)忽略舊的多個異步阿賈克斯請求
我注意到,有時一個較早的ajax請求將在稍後的請求後返回,這會造成混亂。
我現在處理這個問題的方式是我有一個計數器,每個ajax請求都會增加一個計數器。以較低計數返回的請求會被忽略。
我想知道:這是正確的嗎?還是有更好的方法來處理這個問題?
由於提前,
特拉維斯
我有一個自定義的JavaScript自動完成腳本,命中與多個異步阿賈克斯請求的服務器。 (每次鍵被按下。)忽略舊的多個異步阿賈克斯請求
我注意到,有時一個較早的ajax請求將在稍後的請求後返回,這會造成混亂。
我現在處理這個問題的方式是我有一個計數器,每個ajax請求都會增加一個計數器。以較低計數返回的請求會被忽略。
我想知道:這是正確的嗎?還是有更好的方法來處理這個問題?
由於提前,
特拉維斯
可以存儲一個「全局」 currentAjaxRequest
,其中包含最後XHR請求的結構。那麼你可以abort
當前的請求,當你做一個新的。
例如:
var currentAjaxRequest = null;
function autoCompleteStuff() {
if(currentAjaxRequest !== null) {
currentAjaxRequest.abort();
}
currentAjaxRequest = $.get(..., function(...) {
currentAjaxRequest = null;
...
});
}
爲了避免命名衝突,包裹在一個匿名,即刻執行的功能,如果需要的話。
我認爲每次按下某個鍵時發送ajax請求是一個配方,當你得到一對夫婦併發用戶時,yoru服務器超載。嘗試通過設置延遲計時器來限制事件,以便只在半秒內沒有按任何鍵的情況下才發送請求,那麼當用戶停止鍵入時您只會得到一個命中。例如,這個評論可能創建了383個服務器匹配... – Karl 2010-03-17 20:44:02
@Karl,同意,但這仍然是一個問題。 – strager 2010-03-17 21:03:24