我有一个脚本在我的搜索输入框上的keyup事件上执行ajax请求。我在Firefox中注意到(我正在查看控制台)每个被发送的请求都会完成。因此,有大量的ajax请求发生。
无论如何都要在keyup事件中杀死正在进行的ajax请求吗?
jQuery的:
jQuery(function() {
var request;
request = function(url, keyword) {
return $.post('/backpack/' + url + '/search?keyword=' + keyword, function(data) {
var el;
el = "#result_" + url;
return $(el).html(data);
});
};
$("#search_text").bind("keyup", function() {
var query, url, _i, _len, _ref;
query = $(this).val();
if (query.length > 2) {
_ref = ['tracks', 'albums', 'artists'];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
url = _ref[_i];
request(url, query);
}
return $("#search_suggestions").show();
} else {
return $("#search_suggestions").hide();
}
});
return $("#suggestion_all_results").bind("click", function() {
return $('#search_form form').submit();
});
});
答案 0 :(得分:4)
ultimate-uber-authoritative thread here已经回答了这个问题。
简答:它返回一个XHR对象,你可以调用abort()
如果您要发送keyup事件,您可能还会考虑添加延迟;这对你的服务器来说是一个非常大的负荷,所以等到笔画之间暂停几秒钟之后你才开始打扰这个事件。
正如Erv Walter在上述帖子的评论中所说:“值得注意的是,如果服务器已经收到请求,它可能会继续处理请求(取决于服务器的平台),即使浏览器不再监听没有可靠的方法让Web服务器在处理正在进行的请求时停止运行。“
我遇到了做ajax建议查找的相同问题;)
答案 1 :(得分:0)
您只需保存发送的每个请求的返回值,在添加新请求之前,只需先执行savedRequest.abort()
。