在(后退按钮、前进按钮、关闭选项卡/浏览器)上运行最后一个 Ajax 请求 [重复]
Posted
技术标签:
【中文标题】在(后退按钮、前进按钮、关闭选项卡/浏览器)上运行最后一个 Ajax 请求 [重复]【英文标题】:Run one last Ajax Request on (Back button, forward button, close tab/browser) [duplicate] 【发布时间】:2011-09-18 00:01:11 【问题描述】:当用户想要编辑任务时,文件会被锁定。当他们保存或点击关闭按钮(从对话框中)时,文件被解锁。
但是,如果用户单击其中任何一个:后退按钮、前进按钮、关闭选项卡/浏览器
文件被锁定。我有一个清理计划程序,可以在 X 分钟后解锁所有文件。
但是我希望能够执行最后一个请求来解锁文件,这样人们就不必等待 X 分钟直到任务自行解锁,因为有人决定关闭他们的浏览器。
我找到了这个
$(window).unload(function ()
alert('unloaded');
);
但我不知道它支持什么浏览器,也不知道它是否能满足我的要求。
【问题讨论】:
【参考方案1】:window.onunload = function ()
// has to be synchronous so the function doesn't return immediately
$.ajax(
async: false,
...
);
;
同步请求不会被看得太高,因为它们会冻结 UI,但如果您想实现 此特定行为,我看不到任何其他方式。不过,我相信您可以通过其他几种方式进行操作,而无需同步请求。
例如,您可以要求用户在尝试关闭窗口时保存文件:
// use beforeunload to prompt the user
window.onbeforeunload = function ()
if (!saved)
return "Please save the task before exiting!";
;
此外,大多数浏览器都支持这些事件。不过我认为 Opera 是个例外。
【讨论】:
@CD Sanchez - 使用 window.onbeforeunload 比我发布的 jquery 方式更好吗?以上是否适用于所有浏览器? @chobo2:我相信在将 jQuery 的绑定与卸载事件一起使用时存在某种错误。不确定这是否仍然适用,但使用万无一失的方式不会有什么坏处(除非您需要为特定事件分配多个事件处理程序)。 @CD Sanchez - 我还能把它放入准备好的文档中吗? @chobo2:我认为你不必这样做,因为它不依赖于 DOM。 @chobo2:是的,无论出于何种原因,Opera 都不支持这些事件。如果你真的想要这种行为,我认为你可以忽略 Opera,因为与其他浏览器相比,使用它的人并不多。以上是关于在(后退按钮、前进按钮、关闭选项卡/浏览器)上运行最后一个 Ajax 请求 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
当我单击浏览器后退按钮或移动设备后退按钮时,保留选定的选项卡
后退按钮未触发 Chrome 中“beforeunload”中的方法