2016-12-27 22 views
0

如何解決在jQuery ajax自動完成小部件中使用db數據時對數據庫請求過多的問題?基本上每次用戶插入一個字母,腳本都向數據庫發出ajax請求,將db請求保持爲最小的最佳做法是什麼?jQuery自動完成太多分貝請求

我從第三方應用程序獲取數據,所以我必須考慮它可以在我的應用程序中更改。

+2

你可以使用jquery autocomplate的minLength屬性。 – Mehmet

+0

爲什麼不試試Scrollable?看看例子:https://anseki.github.io/jquery-ui-autocomplete-scroll/ – KingRider

回答

1

幾個月前我有同樣的問題。
我發現了兩個解決方案:

解決方案1:
不要從輸入第一個字母查詢。使用「minLength」自動完成屬性。 minLength documentation here。添加該屬性後,第一個查詢將從n開始,其中n是先前鍵入的字母的數字(整數)。
實施例:

$(".selector").autocomplete({ 
    minLength: 3 
}); 

解決方案2:
添加(非常短,但爲數據庫好聽)之間的倍數發送延遲。像250/300/500ms這樣短的一個(取決於您與數據庫之間的ping或用戶帶寬)是非常可觀的。 Delay documentation link here。值以毫秒(整數)爲單位。
例子:

$(".selector").autocomplete({ 
    delay: 500 
}); 

我希望這將符合您的需求。
不要猶豫,使用兩個。

1

您可以調節或消除請求。這些功能通常包含在像Lodash這樣的庫中(https://lodash.com/docs/4.17.2#debounce)。

去抖動:按下某個鍵時,計時器啓動。當計時器結束時,您將進行Ajax調用。在計時器中按下另一個鍵時,定時器將被重置。

油門:當按下某個鍵時,會進行一次Ajax調用並啓動一個定時器。當定時器運行時按下另一個鍵時,它將被忽略。

+0

+1,用於教授與問題相關的新概念。抱歉不接受你的回答。你和@Aethyn的答案都對我有用。 – user3748173