我用jQuery.ajax()方法构建了一个livesearch.在每个keyup事件中,它从服务器接收新的结果数据.
问题是,当我打字速度非常快,例如"foobar的"和"fooba" GET请求需要比"foobar的"要求更多的时间,"fooba"的结果显示.
我想,用超时参数处理这个是不可能的.
有谁知道如何解决这个问题?
您可以.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对象,因此只需挂起它,当您开始下一次搜索时,中止前一个搜索.
为每个请求分配一个唯一的、递增的 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)
| 归档时间: |
|
| 查看次数: |
1014 次 |
| 最近记录: |