jQuery自动完成,当我提出一个新的时,我可以暂停之前的ajax调用吗?

Ela*_*ine 8 ajax jquery jquery-ui-autocomplete

我正在使用jQuery autocomplete,但发现了一个与性能相关的问题 - 如果我输入'abc',它将通过'a','ab'和'abc'扫描,一次,我该如何停止当ajax调用正在通过'abc'进行搜索时,前一个'a','ab'?

类似的情况是:我使用jQuery DataTables,并希望进行一些搜索,例如,我输入要搜索的内容(调用搜索网络方法),然后单击按钮 - 一次"搜索"3次,或者更改搜索文本点击"搜索",然后提出新的搜索,我怎样才能停止以前无用的ajax调用?

Bru*_*nge 18

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 );
            }
        }));
    }
});
Run Code Online (Sandbox Code Playgroud)


Ion*_*icu 5

假设您正在使用jQuery UI自动完成:

  1. 您可以在开始搜索之前指定字符串的最小长度.(默认是3我猜)
  2. 您还可以指定上次击键和ajax调用之间的延迟.通常应该2-300ms.
  3. AjaxQueue可能会帮助您清理一些东西.不知道怎么(我从来不需要它),但值得一试:)