2010-11-08 34 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

相關問題