jQuery ajaxError()处理程序如果用户在页面完成加载之前离开页面时触发

前端之家收集整理的这篇文章主要介绍了jQuery ajaxError()处理程序如果用户在页面完成加载之前离开页面时触发前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们使用jQuery的全局ajaxError()处理程序来警告用户任何AJAX失败:
$(document).ajaxError(function() {  
    $("There was a network or server error. Please try again later.").dialog({  
        title: "Error",modal: true,resizable: false,buttons: { 'Ok': function() { (this).dialog("close"); } }  
    });  
});

不幸的是,如果用户在完成加载之前离开页面,这个全局错误处理程序也会触发。以下是重现错误的步骤:

>用户访问页面A,其中包括通过AJAX加载的元素。
> AJAX元素开始加载。
>用户点击链接以访问网页A上的AJAX元素完成加载之前的网页B.
>在浏览器重定向页面B之前,会短暂出现错误对话框。

任何想法如何我们可以得到ajaxError()不触发时的错误是直接造成的用户访问一个新的页面

更新:这是我的代码现在,在纳入评论中的建议后:

// I added a 3 second delay to our error dialog,enough time
// for the user to leave for a new page:
$(document).ajaxError(function() {
    setTimeout(my_error_handler,3000);
});

// Warn user before leaving page if AJAX is still loading.
// Not sure I'll keep this:
$(document).ajaxStart(function() {
    ajaxing = true;
});

$(document).ajaxStop(function() {
    ajaxing = false;
});

window.onbeforeunload = function() {
    if (typeof(ajaxing) != 'undefined' && ajaxing) {
        return "Page elements are still loading!";
    }
};

解决方法

是的,如果用户导航到另一个页面,xhr将中止,这实际上是一个不成功的通信。解决方案是为onbeforeunload事件注册一个侦听器,并解除绑定ajaxError在那里,基本上说:用户即将离开页面,所以我不希望被告知可能跟随的ajax错误

然而,有些网站,像GMail,反过来:如果你尝试离开页面,而仍有一些ajax请求暂挂,它会给你一个提示,说你有一些进程仍在运行,并让用户决定是否在请求完成之前留在网站上,或者继续前进并离开。

猜你在找的jQuery相关文章