运行最后一个Ajax请求(后退按钮,前进按钮,关闭选项卡/浏览器)

时间:2011-06-19 01:08:02

标签: javascript jquery ajax

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

但是,如果用户点击其中任何一个:后退按钮,前进按钮,关闭标签/浏览器

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

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

我发现了这个

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

但是我不知道它支持哪种浏览器,或者它是否做了我要求它做的所有事情。

1 个答案:

答案 0 :(得分:4)

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是一个例外。