jQuery UI オートコンプリート ウィジェットを検索テキスト ボックスにバインドする次の JS メソッドがあります。取得したばかりの結果を再利用しないため、検索用語を追加するときに不要なサーバー呼び出しを行うことを除いて、キャッシュを含め、すべてが正常に機能します。
たとえば、「ab」を検索すると、サーバーからいくつかの結果が取得されます。検索ボックスに「ab」の後に「c」を入力すると、キャッシュされた「ab」の結果を再利用して「abc」に一致しない結果を除外する代わりに、サーバーから「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);
}
});
});
}