2014-05-21 26 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. 
});