3 回答

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊
其實(shí)方法很簡(jiǎn)單:終止前一個(gè)請(qǐng)求并刪除此請(qǐng)求:
// when keyupif (lastXhr) { lastXhr.abort(); delete lastXhr; } ...
這樣做還有兩個(gè)優(yōu)點(diǎn):
可以防止打字太快導(dǎo)致浪費(fèi)許多請(qǐng)求(比如用戶很快把
java
打出來,其實(shí)j
,ja
,jav
的請(qǐng)求都不需要了),可以防止因?yàn)橥蝗婚g收到很多提示結(jié)果導(dǎo)致提示框亂閃

TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊
目前大多自動(dòng)完成是通過用戶輸入來延遲查詢頻率的,每次請(qǐng)求可以加上loading狀態(tài),讓用戶知道自動(dòng)完成在處理請(qǐng)求.
在請(qǐng)求里加上時(shí)間戳,以比較返回時(shí)間是否超出預(yù)期,如果超出預(yù)期且當(dāng)前詞與請(qǐng)求里的詞不一致則忽略掉返回結(jié)果.
最好的辦法是換個(gè)速度快點(diǎn)的服務(wù)器,優(yōu)化服務(wù)端處理時(shí)間,快速完成用戶的請(qǐng)求.

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊
我是這么處理的,首先你肯定是要記錄每次輸入的事件,每次輸入之后放入到一個(gè)數(shù)組中,如
var key_arr = []; key_arr.push('j');//依次類推key_arr.push('ja'); key_arr.push('jav'); key_arr.push('java');//end//然后在ajax回調(diào)函數(shù)里面就很好判斷了,我們?cè)赼jax返回值里面把查詢的關(guān)鍵詞也返回來,然后如下判斷if(data.keyword == key_arr.pop()){//處理原有的邏輯}
實(shí)際上就是只處理最后輸入的那個(gè)關(guān)鍵詞的ajax回調(diào)函數(shù)邏輯,實(shí)現(xiàn)可能不太優(yōu)雅呵呵
添加回答
舉報(bào)