2010-11-08 82 views
6

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

类似的情况是: 使用jQuery数据表,并希望做一些搜索一样,我输入一些搜索(呼叫查找Web方法),并点击按钮 - 在一次“搜索”的3倍,或改变搜索文本,当我点击'搜索',并提出一个新的搜索,我怎样才能停止以前无用的Ajax调用?

回答

5

假设你正在使用jQuery UI Autocomplete

  1. 可以开始搜索之前指定字符串的最小长度。 (默认为3我猜)
  2. 您还可以指定最后一次按键和ajax调用之间的延迟。通常2-300ms应该这样做。
  3. AjaxQueue可能会帮助你清理一些东西。不知道
12

JQuery的$.ajax如何(我从来没有需要的话),但值得一试:)返回它可以通过它的本地方法.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); 
      } 
     })); 
    } 
}); 
+1

优秀的解决方案被取消XMLHttpRequest对象 – 2014-05-06 11:34:41

相关问题