onbeforeunload中的Ajax第一次无法运行

时间:2015-06-24 11:37:21

标签: javascript jquery ajax redirect onbeforeunload

我一直在尝试通过调用以下脚本来绑定beforeunload事件,以便我可以通过AJAX转到指定的URL。问题是AJAX第一次没有工作,因为第一次刷新页面时没有调用URL。第二次ajax工作。当我将async设置为falsesuccess内的警告弹出窗口未显示时,此问题会得到解决。我需要警告框也显示在success区块中。

 <script type="text/javascript">
  $( document ).ready(function() {
    // this method will be invoked when user leaves the page, via F5/refresh, Back button, Window close
    $(window).bind('beforeunload', function(event){
          // invoke the servlet, to logout the user
      $.ajax({
        cache: false,
        type: "GET",
        url: "LogoutController" ,
        success: function (data) {
          alert("You have been logged out");
        }

      });
    });
 });
</script>

1 个答案:

答案 0 :(得分:1)

beforeunload将等待事件处理程序在关闭页面之前完成其执行。由于ajax调用是异步的,beforeunload不会等待它完成(但是你的服务器应该仍然得到请求)。这是预期的行为,我不认为它们是一种解决方法。

可以使用以下代码重现此行为:

window.onbeforeunload = function () {
    console.log("bye");
    setTimeout(function () {
        console.log("bye1");
    }, 200);
    console.log("bye2")
};

//bye
//bye2

此外,您应该注意到,根据MDN规范声明alert()可以忽略:

  

自2011年5月25日起,HTML5规范声明要调用   window.alert(),window.confirm()和window.prompt()方法可能是   在这次活动中被忽略了。

当Chrome上发生这种情况时(仅我检查过的浏览器),您将在控制台中收到以下消息:

Blocked alert('test') during beforeunload.