7

我目前正在使用一种工具来检索 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();
});

我想我没有得到一个优化技巧。谢谢你的帮助。

4

2 回答 2

6

还要记住,向服务器打开 AJAX 请求,然后取消请求不会取消服务器上处理的请求,它只是阻止浏览器侦听响应。服务器将继续处理任何断开连接的 ajax 请求,直到它们完成运行,此时它会尝试向客户端发送响应并发现没有人在监听,然后死掉。

于 2014-04-07T19:49:52.383 回答
0
jQuery('#my_input').focusout(function(){   
    jQuery.xhrPool.abortAll();
});      

blur 事件,因为它支持检测父元素失去焦点

blur vs focusout - 有什么真正的区别吗?

于 2014-04-07T12:34:14.277 回答