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