我有以下JS方法將jQuery UI自動填充小部件綁定到搜索文本框。一切工作正常,包括緩存,除了我追加我的搜索字詞時不必要的服務器調用,因爲我不重複剛剛檢索的結果。如何在追加搜索詞時重用jquery-ui-autocomplete緩存結果?
例如,搜索「ab」從服務器獲取一些結果。在搜索框中的「ab」之後鍵入「c」會從服務器獲取「abc」結果,而不是重複使用緩存的「ab」結果,並省略與「abc」不匹配的結果。
我沿着手動查找「ab」搜索結果的路徑,使用正則表達式來篩選它們以選擇「abc」子集,但是這看起來完全像是在重新發明輪子。什麼是正確的,規範的方式告訴小部件使用「ab」結果,但過濾他們的「ABC」條款,並重新顯示縮短的下拉?
function bindSearchForm() {
"use strict";
var cache = new Object();
$('#search_text_field').autocomplete({
minLength: 2,
source: function (request, response) {
var term = request.term;
if (term in cache) {
response(cache[term]);
return;
}
$.ajax({type: 'POST',
dataType: 'json',
url: '/get_search_data',
data: {q: term},
success: function (data) {
cache[term] = data;
response(data);
}
});
});
}
有趣的問題,但多少這實際上節省了你?看起來它可能比它的價值更麻煩...... –
@Andrew Whitaker:這對於大型數據集可以節省很多;例如將「c」和「d」附加到最初的「ab」搜索詞當前會導致三次服務器調用,可能只是一次初始調用。 – gorus
夠公平的。我不知道有這樣一個規範的方法。您將不得不遍歷緩存中的每個項目,並檢索緩存的結果,該結果是您搜索的內容的前綴。然後,您需要按當前搜索詞過濾* that *搜索的結果。 –