【问题标题】:window.onbeforeunload gets triggered in IE for Asynchronous calls?window.onbeforeunload 在 IE 中被触发以进行异步调用?
【发布时间】:2012-04-23 23:13:42
【问题描述】:
window.onbeforeunload = function (e) {
    someFunction();
}

很明显,每当有页面刷新时 someFunction() 都会被调用。但是在 Internet Explorer 中,只有在部分页面加载时, someFunction() 才会被调用。我怎样才能防止这种情况发生?或者如何使用 jQuery 添加一个事件侦听器,该事件侦听器在进行异步调用时触发?

【问题讨论】:

    标签: jquery internet-explorer asynchronous onbeforeunload


    【解决方案1】:

    在异步请求的生命周期中有许多方法被调用。你可以绑定到任意数量的它们。有关列表,请参阅http://api.jquery.com/category/ajax/。这可以防止您像在此处那样遇到不同的浏览器实现。

    例如,使用$.ajaxSetup() 我可以设置一个函数在每个请求之前运行:

    $.ajaxSetup({
      beforeSend: function() {
       console.log( 'New request going out.' ) 
      }
    });
    

    您可能还想在调用完成后运行您的逻辑,在这种情况下,您可以将函数应用于传递给$.ajaxSetup() 的对象的complete 成员:

    $.ajaxSetup({
      complete: function() {
        console.log( 'Call completed.' );
      }
    });
    

    这些方法有几个参数,如果您正在执行需要知道具体提出了哪些请求的逻辑,您可能希望使用这些参数。 Complete,例如,将传递 jQuery 使用的 XHR 对象,以及为调用返回的状态。

    $.ajaxSetup({
      complete: function( jqHXR, status ) {
        console.log( 'Completed: ' + status );
      }
    });
    

    【讨论】:

    • 感谢您的回复,但由于某种原因,它们没有被触发。可能是因为部分刷新页面的链接是使用 控件生成的?我对 .net 了解不多。
    • @SammyD 这些全局回调只会在您使用 jQuery 的 ajax 方法进行异步调用时触发。您是使用 jQuery 的 ajax 方法进行调用,还是手动构建您的 XHR 对象?
    • 不,他们正在使用 jQuery 的 ajax 方法。它正在使用 .
    • @SammyD 对不起,您的问题没有提到 ASP.NET 控件。我是一名 PHP 开发人员,对 ASP.NET 的经验很少。请修改您的问题,以便其他人可以更好地帮助您。
    猜你喜欢
    • 1970-01-01
    • 2013-07-22
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    相关资源
    最近更新 更多