如何在ajax调用完成之前阻止页面导航

时间:2013-08-05 12:12:44

标签: ajax jquery onbeforeunload

所以我有一个ajax调用来调整几十个大小的数据块,然后通过html5文件系统api在本地存储数据。

我想阻止用户在完成ajax调用之前导航离开页面。我决定探索onbeforeunload事件,让它通知用户应该留在页面上,直到ajax调用完成。我在AJAX调用之前设置了以下内容,并且在AJAX调用结束/成功时我重置了window.onbeforeunload

window.onbeforeunload = function(){
    return "Information is still downloading, navigating away from or closing "+ 
        "this page will stop the download of data";
}

当我尝试关闭页面或离开页面时,弹出消息会按预期显示,通知用户留下。但是,一旦我确认我想留在页面上,ajax调用就不会从他们中断的地方恢复。有没有办法阻止ajax调用暂停/停止或继续执行/重启执行?

我愿意接受任何想法来实现本文标题中描述的所需功能。

1 个答案:

答案 0 :(得分:6)

非常确定您可以在.js文件中创建全局,例如......

var request;

然后将ajax调用分配给此变量。

request = $.ajax{
 //Ajax
 //Stuff
 //Goes
 //Here
}

现在在window.unbeforeunload函数中添加此条件语句。

window.onbeforeunload = function(){
  if(!request){
    return "Request not initiated";
  }else{
    //Request is in progress...
    //You can use request.abort() if you need
  }
}

编辑:详细说明可以在request对象check out this page上使用的一些方法。 (例如,.done.always可能适合您的情况)