我正在我的网站(rails)上实现实时搜索功能。每次有按键时,我都会提交表格。但是,如果用户键入多个字符,则会向服务器发送多个搜索请求。我想知道是否有办法停止以前(未处理)的请求。我只希望成功处理最后一个请求。
我知道有一个abort()方法可以中止ajax请求,但是我不再能控制前一个请求,所以我不能在中断上调用abort。也许我在这里做错了。
任何人
由于
PUNIT
答案 0 :(得分:5)
无法使用jQuery停止Ajax请求。处理此类事件的更好方法是“去抖动”事件:http://benalman.com/code/projects/jquery-dotimeout/examples/debouncing/(尝试第一个示例) 。这样,每次按键都不会触发事件;就在用户暂停一段时间的时候。否则,你最终会收到很多请求。
但是有一种方法:
var lastRequest;
$("input").keypress(function(){
if (lastRequest){
lastRequest.abort();
lastRequest = null;
}
lastRequest = $.ajax({type: "POST", url: "some.php", data: "your=data&goes=here"});
});
来自:Abort Ajax requests using jQuery
Bootnote:“lastRequest
”听起来很邪恶。