【问题标题】:Run one last Ajax Request on (Back button, forward button, close tab/browser) [duplicate]在(后退按钮、前进按钮、关闭选项卡/浏览器)上运行最后一个 Ajax 请求 [重复]
【发布时间】:2011-09-18 00:01:11
【问题描述】:

当用户想要编辑任务时,文件会被锁定。当他们保存或点击关闭按钮(从对话框中)时,文件被解锁。

但是,如果用户单击其中任何一个:后退按钮、前进按钮、关闭选项卡/浏览器

文件被锁定。我有一个清理计划程序,可以在 X 分钟后解锁所有文件。

但是我希望能够执行最后一个请求来解锁文件,这样人们就不必等待 X 分钟直到任务自行解锁,因为有人决定关闭他们的浏览器。

我找到了这个

$(window).unload(function ()
    {
        alert('unloaded');
    });

但我不知道它支持什么浏览器,也不知道它是否能满足我的要求。

【问题讨论】:

    标签: javascript jquery ajax


    【解决方案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,因为与其他浏览器相比,使用它的人并不多。
    猜你喜欢
    • 2013-04-26
    • 2014-02-03
    • 2010-09-14
    • 2010-09-10
    • 1970-01-01
    • 2013-07-31
    • 2013-03-02
    • 2011-04-06
    • 2014-07-24
    相关资源
    最近更新 更多