我希望用户确认他要离开页面。我用jQuery这样做:
$(window).bind('beforeunload', function(){
return "Are you sure?";
});
如果用户说“是”,我想运行一个函数,在浏览器选项卡关闭之前发出一个ajax请求来保存一些数据。这可能吗?在那种情况下如何?
答案 0 :(得分:2)
你问的是不可能的。 beforeunload
不允许您进行自己的提示,然后根据问题的答案进行分支。它只允许您运行代码或返回一个提示字符串,该字符串只是确定用户是否导航离开页面。
在您的特定情况下,我建议您在获得此回调时始终保存数据(如文字处理程序中的自动保存)。如果用户选择留在页面上并进行更多更改,则可以在以后离开页面时再次保存新的数据状态。您必须仔细测试多个浏览器,以确保在beforeunload
处理程序中启动的ajax调用将正确完成。看起来应该如此,但浏览器之间可能存在实现差异。
仅供参考,beforeunload
如此严格的原因是因为它必须防止恶意网页滥用,以防止您在需要时离开其网站。
答案 1 :(得分:1)
由于jfriend00提到了你想要做的事情,这是不可能的。你最好的选择是按下后退按钮时会感到悲观。我的意思是:
$(window).bind('beforeunload', function(){
$.ajax({
//Do ajax call to save
});
return "Are you sure?";
});
这将做什么希望给你的ajax调用留出时间并通知服务器新数据。我希望因为当您离开页面时浏览器将终止所有请求。
另外要记住的是,当用户强行关闭浏览器时,不会触发此事。