9

jQuery を使用しautocompleteていますが、パフォーマンス関連の問題が見つかりました。「abc」と入力すると、「a」、「ab」、「abc」が同時にスキャンされます。どうすれば停止できますか? ajax呼び出しが「abc」で検索を行っているときの前の「a」、「ab」?

同様のケースは次のとおりです。jQuery DataTables を使用していて、検索するものを入力して (検索 Web メソッドを呼び出して)、[検索] ボタンを一度に 3 回クリックしたり、検索テキストを変更したりしたいなどの検索を行いたいと考えています。 「検索」をクリックして、新しい検索を起動します。以前の役に立たない ajax 呼び出しを停止するにはどうすればよいですか?

4

2 に答える 2

20

JQuery$.ajaxは、ネイティブ メソッドを介してキャンセルできる xmlHttpRequest オブジェクトを返します。.abort()

$("#search").autocomplete({
    minLength: 3,
    delay: 300, // this is in milliseconds
    json: true,
    source: function(request, response){
        // New request 300ms after key stroke
        var $this = $(this);
        var $element = $(this.element);
        var previous_request = $element.data( "jqXHR" );
        if( previous_request ) {
            // a previous request has been made.
            // though we don't know if it's concluded
            // we can try and kill it in case it hasn't
            previous_request.abort();
        }
        // Store new AJAX request
        $element.data( "jqXHR", $.ajax( {
            type: "POST",
            url: "foo.php",
            dataType: "json",
            success: function( data ){
                response( data );
            }
        }));
    }
});
于 2012-10-03T17:16:12.140 に答える
5

jQuery UI Autocompleteを使用していると仮定します:

  1. 検索を開始する前の文字列の最小長を指定できます。(デフォルトは 3 だと思います)
  2. 最後のキーストロークと ajax 呼び出しの間の遅延を指定することもできます。通常は 2 ~ 300ms で十分です。
  3. AjaxQueueは、いくつかのものをきれいにするのに役立つかもしれません。方法はわかりません(私はそれを必要としません)が、一見の価値があります:)
于 2010-11-08T07:40:58.380 に答える