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 回答