jQuery.ajax():丢弃慢速请求

Tho*_*mas 5 ajax jquery

我用jQuery.ajax()方法构建了一个livesearch.在每个keyup事件中,它从服务器接收新的结果数据.

问题是,当我打字速度非常快,例如"foobar的"和"fooba" GET请求需要比"foobar的"要求更多的时间,"fooba"的结果显示.

我想,用超时参数处理这个是不可能的.

有谁知道如何解决这个问题?

Nic*_*ver 7

您可以.abort()在开始新请求时存储和最后一个请求,如下所示:

var curSearch;
$("#myInput").keyup(function() {
  if(curSearch) curSearch.abort(); //cancel previous search
  curSearch = $.ajax({ ...ajax options... }); //start a new one, save a reference
});
Run Code Online (Sandbox Code Playgroud)

$.ajax()方法返回XmlHttpRequest对象,因此只需挂起它,当您开始下一次搜索时,中止前一个搜索.


Wim*_*Wim 1

为每个请求分配一个唯一的、递增的 ID,并且仅按递增顺序显示它们。像这样的东西:

var counter = 0, lastCounter = 0;
function doAjax() {
  ++counter;
  jQuery.ajax(url, function (result) {
    if (counter < lastCounter)
      return;
    lastCounter = counter;
    processResult(result);
  });
}
Run Code Online (Sandbox Code Playgroud)