2010-04-28 55 views
7

我已閱讀了幾篇討論jQuery最佳自動完成插件的文章/問題/論壇。在嘗試了幾個好的之後,我發現大部分都有缺陷。jQuery/AJAX提前/自動完成

  1. 如果您正在查找國家並輸入'In',則會顯示一些國家/地區。 如果您繼續輸入I-n-d-i-a,則會導致5個AJAX調用(請參見http://www.freeimagehosting.net/uploads/6f1bcd69e1.png) ,這很自然,因爲印度是In的子集,那麼爲什麼再次調用?我們需要簡單地過濾檢索到的列表客戶端。 任何人都知道這樣的實現?

  2. Jquery自動完成功能的狀態是什麼?我在StackOverflow上讀到它不再可用於Jquery;但除了鏈接到Autocomplete之外,Jquery網站還有一個「新」標記。

感謝

+0

聽起來像是寫一個更好的插件的機會。我想只有第一個例如10​​個回覆纔會返回,並且您需要重新查詢以獲取所有ind。但是,如果響應的數量少於閾值,那麼應該按照您的建議重新使用這些響應。 – 2010-04-28 11:36:54

+0

這是一個非常好的觀點,如果您只是在最後添加到您的查詢中,則可以過濾掉所擁有的內容。是否有任何插件將這個想法考慮在內?差不多兩年前這個問題被問到了,我很想知道答案。 – vbullinger 2012-04-12 14:59:15

回答

8

你寫在可能是因爲點:

  • 搜索 'In' shoudl返回了不少成果
  • 有一些限制就位而言,在服務器端永遠不會返回超過N個結果
  • 這意味着完整的計數列表包含「In」未知,在客戶端
  • 這意味着無法獲得(肯定)對應於「Ind」沒有其他Ajax請求的列表。

通常使用的半解決方案是在按鍵後立即不發送Ajax請求,但僅在100或200毫秒後發送。

這樣,如果鍵入之前別的用戶鍵入「Indi」快,並等待時,將只有1個Ajax請求,爲「Indi(並沒有爲「In」,「Ind」)

+0

哦,是的,我已經這樣做了,以減少請求的數量。您討論的場景是有效的,但可以定義參數以避免這種不理想的行爲。 – Prasad 2010-04-28 11:56:14

3

在新版本1.8中添加了jQuery UI自動完成功能,所以我在項目活動中看到它仍在開發中。有一個example使用關於您解釋的問題的客戶端緩存。您也可以使用已經提到的延遲選項。

+0

很高興知道他們會繼續使用自動完成功能。然而,這個例子在緩存方面並不是最好的。嘗試每次找到'南丁格爾'一個字符..當從'晚上'(5個結果)到'nighti'(2個結果)時,它會發出一個呼叫:( 猜測我將不得不接受額外的呼叫:(:(: – Prasad 2010-04-28 12:28:29

+0

那麼他們在那裏做的只是簡單的正則表達式匹配,所以你基本上只需要在發送一個新請求之前首先匹配你的緩存列表。對於你必須考慮的遠程源,你可能不會得到整個列表,例如* In *,可能會受到限制到最大數量的項目,因此您必須發送下一封信的新活動。 – Daff 2010-04-28 12:44:43