jQuery UI autocomplete documentation を見て、キャッシュを使用したコールバックの例を見ています:
$(function() {
var cache = {}, lastXhr;
$('#Field').autocomplete({
minLength: 2,
delay: 600,
source: function(request, response) {
var term = request.term;
if( term in cache ) {
response(cache[term]);
return;
}
lastXhr = $.post('LoadData', function(data, status, xhr) {
cache[term] = data;
if(xhr === lastXhr) {
response(data);
}
});
}
});
});
このコードは、オートコンプリートを使用するようにフィールドを接続し、既にヒットしたクエリのキャッシュを保存します。次の行が使用されているため、あるクエリが別のクエリよりも長くかかる場合でも、オートコンプリート値が置き換えられません。
if(xhr === lastXhr) {
response(data);
}
いくつかの文字を入力し始めて、データをクエリするためにサーバーに送られ、一時停止して再び入力を開始すると、サーバーへの別のトリップがトリガーされます。最初のクエリが 2 番目のクエリの後に終了した場合、読み込み中のアイコンは消えることはありません。これは、コールバックを呼び出していないためだと思いresponse()
ます。2 番目のリクエストが行われた後で、最初のリクエストをキャンセルする方法はありますか?