当前位置:  开发笔记 > 前端 > 正文

jQuery:在页面卸载时自动中止AjaxRequests?

如何解决《jQuery:在页面卸载时自动中止AjaxRequests?》经验,为你挑选了2个好方法。

谢谢阅读.

我注意到如果我有一个打开了一个或多个ajax请求的页面,并且我单击一个链接离开页面或刷新它,它将等待ajax请求在卸载之前完成.

这通常不是问题,但如果请求需要一段时间,它可以.

我正在寻找类似的东西:

$(window).bind("beforeunload", function() {AjaxRequest.abort();});

在卸载之前自动中止请求,但不太确定如何查找ajax请求.他们会在某个窗口下吗?



1> Luca Matteis..:

在$阿贾克斯() jQuery的方法返回XMLHttpRequest对象.这意味着您可以在对象上应用标准方法,例如abort().

卸载使用内置的卸载 jQuery事件方法.

var myajax = $.ajax(...); 
$(window).unload( function () { myajax.abort(); } );



2> yourpublicdi..:

以下代码经过测试并在Chrome中卸载页面卸载时所有未完成的jQuery ajax请求,但Edge和IE使用客户端也没有错误地使用它.

将以下内容作为第一个jQuery ready处理程序:

$(onPageLoaded)

把它放在可以访问的地方:

function onPageLoaded() {
    var jqxhrs = [];

    $(window).bind("beforeunload", function (event) {
        $.each(jqxhrs, function (idx, jqxhr) {
            if (jqxhr)
                jqxhr.abort();
        });
    });

    function registerJqxhr(event, jqxhr, settings) {
        jqxhrs.push(jqxhr);
    }

    function unregisterJqxhr(event, jqxhr, settings) {
        var idx = $.inArray(jqxhr, jqxhrs);
        jqxhrs.splice(idx, 1);
    }

    $(document).ajaxSend(registerJqxhr);
    $(document).ajaxComplete(unregisterJqxhr);
};

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有