2010-12-14 10 views
2

jQuery UIオートコンプリートを使用して検索インターフェイスを構築しています。jQuery UIオートコンプリート:非同期プロセスを開始して終了するにはどうすればいいですか?

検索結果を返し、キーが押されると自動的に更新されるカスタム関数を定義しましたが、次のキーが押される前にこのカスタム関数が完了しないことがあります(つまり、 (ワシ "と書いてある途中)

オートコンプリート"ソース "イベントを呼び出すたびに、以前の機能(ウォッシュ)をキャンセルして新しい機能を開始することができます。 (Washi)、起動機能(Washin)などがあります。

この種の処理はどのように行われますか?

答えて

3

あなたはこのような何かを行うことができるはず:

var lastXhr; 
$("#myAutocomplete").autocomplete({ 
    source: function(request, response) { 
     if (lastXhr) lastXhr.abort(); 
     lastXhr = $.getJSON("search.php", request, function(data, status, xhr) { 
      if (xhr === lastXhr) { 
       response(data); 
      } 
     }); 
    } 
}); 

lastXhrのvar店最新のXHRリクエスト。 1つのセットがあり、ソース関数が呼び出された場合、lastXhr要求を打ち切り、新しいものを作成します。 lastXhrと一致するかどうかを確認する場合はajaxリクエストが返され、そうでなければresponse()関数は呼び出されません。

+0

任意の関数/オブジェクトをラップしてabort()メソッドを持ち、ノンブロッキングな方法で実行する方法はありますか?またはこのトリックは$ .getJSONラッパーでしか動作しませんか? – tjb

+0

@tjb abortはAjaxリクエストにとって特別です。 – PetersenDidIt

+0

ピーターソン、あなたの答えは正しいと思います。私はそれを受け入れます。しかし、これはうまくいくでしょう:私はいつも成功するとわかっているようにURLを書いて、返されたデータとは何の関係もないが有用なことをする関数を書く。その場合、(関数がブロックしていても)中止でき、そのようにして上記の機能を任意の関数で得ることができますか? – tjb

関連する問題