我有一个脚本,可以对搜索输入框上的 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();
});
});
最佳答案
这个问题已经在 ultimate-uber-authoritative thread here 中得到了解答。 .
简短回答:它返回一个 XHR 对象,您可以调用 abort()
如果您要发送 keyup 事件,您可能还会考虑添加延迟;这将给您的服务器带来相当大的负载,因此在开始事件之前请等待笔画之间的几秒钟的暂停。
正如 Erv Walter 在上述线程的评论中所说:“值得注意的是,如果服务器已经收到请求,则即使浏览器不再监听,它也可能会继续处理该请求(取决于服务器的平台)响应。没有可靠的方法可以让 Web 服务器停止处理正在进行的请求。”
我在进行 ajax 建议查找时遇到了同样的问题;)
关于jQuery Keyup Ajax 请求 : Kill previous requests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8072698/