当前位置: 首页 > 面试题库 >

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

顾英发
2023-03-14
问题内容

我们使用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"); } }  
    });  
});

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

  1. 用户访问页面A,页面A包含通过AJAX加载的元素。
  2. A页上的AJAX元素开始加载。
  3. 在页面A上的AJAX元素加载完成 之前, 用户单击链接即可访问页面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!";
    }
};

问题答案:

好吧,是的,如果用户导航到另一个页面,则xhr将中止,实际上是不成功的通信。一种解决方案是为该onbeforeunload事件注册一个侦听器,然后ajaxError在那里取消绑定,基本上是这样说的:用户将要离开页面,所以我不希望被告知可能发生的ajax错误。

不过,有些网站(例如GMail)的处理方式却相反:如果您尝试离开页面,而仍然有一些ajax请求未决,它会提示您您的某些进程仍在运行,用户决定是留在网站上直到请求完成,还是继续浏览。



 类似资料:
  • 问题内容: 我的网站上有一个版块,在进行一些密集的通话时加载速度很慢。 知道如何div在页面准备时显示类似于“加载”的内容,然后在一切准备就绪时消失吗? 问题答案: 我需要这个,经过一番研究,我想到了这个(需要jQuery): 首先,在标签之后添加以下代码: 然后将div和图片的样式类添加到CSS: 然后,将此JavaScript添加到您的页面中(当然,最好在页面结尾处,在结束

  • 我必须从网页上阅读某个领域的内容。有人告诉我,我需要获取整个页面,然后从html内容中提取文本。我使用以下程序来获取所需的页面html内容。现在的问题是,这个网页需要几秒钟的时间来加载我想要读取的实际文本值,即使其他静态页面组件都是在前面加载的。我的程序在静态组件加载之后,但在我的值加载之前,返回html内容。因此,我得到的最终HTML具有页面加载过程pic,而不是实际值。有没有人可以指导我在这个

  • 我必须从网页上阅读某一领域的内容。我已经被告知,我需要获得整个页面,然后从html内容中提取文本。我正在使用下面的程序来获取所需的页面html内容。现在的问题是,这个网页加载我想要读取的实际文本值需要几秒钟的时间,即使前面加载了其余的静态页面组件。我的程序在静态组件加载之后但在我的值加载之前返回html内容。因此,我得到的最终HTML有页面加载过程pic,而不是实际值。有没有人可以指导我在这个程序

  • 问题内容: 我正在寻找一种在页面加载时自动“单击”项目的方法。 我尝试使用 但这似乎行不通吗?但是,当我进入Firebug的控制台并运行脚本时,它可以工作。 可以在加载时使用触发事件吗? 问题答案: 您尝试触发的点击处理程序很可能也通过附加了。可能发生的情况是您在附加处理程序之前触发了事件。解决方法是使用: 10ms的延迟将导致该函数在所有处理程序被调用后立即运行。

  • 本文向大家介绍vue离开当前页面触发的函数代码,包括了vue离开当前页面触发的函数代码的使用技巧和注意事项,需要的朋友参考一下 我就废话不多说了,大家还是直接看代码吧~ 补充知识:vue中进入路由页面和离开路由页面后执行函数 进入路由页面 离开路由页面后执行函数 说明:destroyed是与methods、mounted同层级的 以上这篇vue离开当前页面触发的函数代码就是小编分享给大家的全部内容

  • 我正在使用selenium页面对象模型下面是问题场景我正在使用below命令点击一个元素 driver.findElement(by.xpath(“xxxxxxx”)).click(); 当代码执行上面的行时,在浏览器中已经执行了单击,一个新的页面开始加载,但是代码在上面的行处停留直到整个页面加载。在页面完全加载之前,我无法在任何webelemnet上执行任何操作。下面是代码: WebElemen