使用jQuery停止未完成的Ajax请求

时间:2010-09-12 21:30:33

标签: jquery ruby-on-rails

我正在我的网站(rails)上实现实时搜索功能。每次有按键时,我都会提交表格。但是,如果用户键入多个字符,则会向服务器发送多个搜索请求。我想知道是否有办法停止以前(未处理)的请求。我只希望成功处理最后一个请求。

我知道有一个abort()方法可以中止ajax请求,但是我不再能控制前一个请求,所以我不能在中断上调用abort。也许我在这里做错了。

任何人

由于

PUNIT

1 个答案:

答案 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”听起来很邪恶。