我目前正在使用工具在jQuery事件按键上检索数据库中的地址。 当文本输入失去焦点时,我会取消每个待处理的请求,以避免在用户完成填写输入后出现下拉列表。 一切正常,但是,完成我发送一个最终的ajax请求转到我的表单的下一步。这个请求比取消所有这些请求之前要慢得多。我不明白为什么,取消的请求不应该影响待处理的请求(我确定它们已被取消,在Chrome工具的网络选项卡中查找)。 我正在使用此代码:
jQuery.xhrPool = [];
jQuery.xhrPool.abortAll = function() {
jQuery(this).each(function(idx, jqXHR) {
jqXHR.abort();
jQuery('.loader').hide();
});
};
jQuery.ajaxSetup({
beforeSend: function(jqXHR) {
jQuery.xhrPool.push(jqXHR);
},
complete: function(jqXHR) {
var index = jQuery.xhrPool.indexOf(jqXHR);
if (index > -1) {
jQuery.xhrPool.splice(index, 1);
}
}
});
jQuery('#my_input').blur(function(){
jQuery.xhrPool.abortAll();
});
我想我有一个我没有得到的优化技巧。 谢谢你的帮助。
答案 0 :(得分:3)
请记住,向服务器打开AJAX请求,然后取消请求不会取消服务器上的处理请求,它只是阻止浏览器侦听响应。服务器将继续处理任何断开连接的ajax请求,直到它们完成运行,此时它会尝试向客户端发送响应并找不到任何人监听,死亡。
答案 1 :(得分:0)
jQuery('#my_input').focusout(function(){
jQuery.xhrPool.abortAll();
});
模糊事件,因为它支持检测父元素的焦点丢失