jQuery Keyup Ajax请求:杀死以前的请求

我有一个脚本在我的搜索输入框上的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(); }); }); 

这已经在最终的超级权威主题中得到了回答。

简答:它返回一个XHR对象,你可以调用abort()

如果您要发送keyup事件,您可能还会考虑添加延迟; 这对你的服务器来说是一个相当大的负担,所以等到笔画之间暂停几秒钟然后你就开始了。

正如Erv Walter在上述post的评论中所说:“值得注意的是,如果服务器已经收到请求,它可能会继续处理请求(取决于服务器的平台),即使浏览器不再收听响应。没有可靠的方法可以让Web服务器在处理正在进行的请求时停止运行。“

我遇到了同样的问题做ajax建议查找;)

您只需保存发送的每个请求的返回值,并在添加新请求之前,先执行savedRequest.abort()