2010-03-17 62 views
4

我有一個自定義的JavaScript自動完成腳本,命中與多個異步阿賈克斯請求的服務器。 (每次鍵被按下。)忽略舊的多個異步阿賈克斯請求

我注意到,有時一個較早的ajax請求將在稍後的請求後返回,這會造成混亂。

我現在處理這個問題的方式是我有一個計數器,每個ajax請求都會增加一個計數器。以較低計數返回的請求會被忽略。

我想知道:這是正確的嗎?還是有更好的方法來處理這個問題?

由於提前,

特拉維斯

+1

我認爲每次按下某個鍵時發送ajax請求是一個配方,當你得到一對夫婦併發用戶時,yoru服務器超載。嘗試通過設置延遲計時器來限制事件,以便只在半秒內沒有按任何鍵的情況下才發送請求,那麼當用戶停止鍵入時您只會得到一個命中。例如,這個評論可能創建了383個服務器匹配... – Karl 2010-03-17 20:44:02

+0

@Karl,同意,但這仍然是一個問題。 – strager 2010-03-17 21:03:24

回答

8

可以存儲一個「全局」 currentAjaxRequest,其中包含最後XHR請求的結構。那麼你可以abort當前的請求,當你做一個新的。

例如:

var currentAjaxRequest = null; 

function autoCompleteStuff() { 
    if(currentAjaxRequest !== null) { 
     currentAjaxRequest.abort(); 
    } 

    currentAjaxRequest = $.get(..., function(...) { 
     currentAjaxRequest = null; 

     ... 
    }); 
} 

爲了避免命名衝突,包裹在一個匿名,即刻執行的功能,如果需要的話。