2014-05-21 54 views
1

我知道這個問題有很多方面的問題,我也可以使它工作。它只與一個鍵*事件組合不起作用... 爲什麼.abort()不能在此功能中工作?關鍵事件jQuery .abort()

function setGlobalSearch(){ 
    var xhr; 
    $('#globalSearch').keyup(function(){ 
     if(xhr && xhr.readystate != 4){ 
      xhr.abort(); 
     } 
     var searchVal = $(this).val(); 
     xhr = $.ajax({ 
      type: "GET", 
      url: "/ajax.actions?i=globalSearch&q="+searchVal, 
      success: function(data) { 
       $('#globalSearchResults').html(data); 
      }, 
      dataType:"html", 
      cache:false 
     }); 
    }); 
} 

回答

1

abort()函數只會在請求發送時觸發。我只能說這可能並非如此。

但是,我會推薦一個不同的模式,否定中止請求的需要,就像你所看到的那樣,偶爾會有一點片狀。相反,我只會在打字停止一段毫秒後觸發請求。試試這個:

var timer; 
$('#globalSearch').keyup(function() { 
    clearTimeout(timer); 
    timer = setTimeout(function() { 
     var searchVal = $(this).val(); 
     $.ajax({ 
      type: "GET", 
      url: "/ajax.actions?i=globalSearch&q="+searchVal, 
      success: function(data) { 
       $('#globalSearchResults').html(data); 
      }, 
      dataType:"html", 
      cache:false 
     }); 
    }, 150); // fire the AJAX request 150ms after typing stops. 
});