我们使用google i/o大会的全球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"); } }  
    });  
});  

不幸的是,这个全球性的错误处理程序也大火如果用户离开网页之前完成装载。下面是步骤来重现的错误:

  1. 用户访问的网页,其中包括的要素是通过阿贾克斯。
  2. 阿贾克斯素页上的一个开始装载。
  3. 用户的点击的链接页面访问B 之前 阿贾克斯素页上的一个已完成的负载。
  4. 错误对话框出现之前短暂的浏览器的重要页面,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!";
    }
};
有帮助吗?

解决方案

嗯,是的,如果用户浏览的另一个网页,把将中止,它实际上是不成功的通信。一个解决办法将可登记的一个监听的 onbeforeunload 事件,并解除 ajaxError 在那里,基本上说:用户是关于离开页面,所以我不希望被告知的ajax错误,可能会遵循。

一些网站,但是,如免费做的其他方式:如果你试图离开该页的同时,仍然有一些阿贾克斯的请求待决,它给你一个提示,说你已经有了一些进程仍在运行,并允许用户决定是否要留在现场,直到的请求已经完成,或继续前进,并导航程。

其他提示

根据大卫*赫德伦的响应上述这里的代码作品对我说:

//enable global ajax error handling
$(document).ajaxError(function (event, request, settings) {
    //your error handling code here
});

//user leaving page so ignore any unfinished ajax loads
$(window).bind('beforeunload', function () {
    $(document).unbind('ajaxError');
});

我得到了 'ajaxError' 规范的评论部分的 jquery ajaxError文件.我不得不结合 beforeunload$(window) 为了支持铬(即工作的现有文件)。 .ajaxError 没有火灾的时候我被绑来 $(window) 所以这就是为什么我有这个窗口/文件解决方案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top