【问题标题】:How to prevent page navigation until ajax call is complete如何在 ajax 调用完成之前阻止页面导航
【发布时间】:2013-08-06 03:25:45
【问题描述】:

所以我有一个 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 调用暂停/停止或继续/重新开始执行?

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

【问题讨论】:

    标签: ajax jquery onbeforeunload


    【解决方案1】:

    很确定您可以在 .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 可能适合您的情况)

    【讨论】:

    • 感谢您的帖子和链接,我一直在浏览和测试,如果我能根据您显示的内容来解决问题,我会选择作为答案。到目前为止,您的帖子肯定很有帮助。
    • 很高兴我能帮上忙!如果您有任何问题,请告诉我,我会尽力提供帮助
    • 所以,我问的问题更笼统——我实际上正在进行 30 多个 ajax 调用,其中一些是 jquery AJAX,其中一些是普通 AJAX。但是,我使用了一个布尔值,该值基于来自 AJAX 的成功调用(在 onbeforeunload 事件方法中检查)并在 if 语句的 else 部分中处理 ajax 调用。最终,你的帖子让我到达了我需要去的地方。非常感谢您的帮助!
    • 我们可以对 xmlhttp 请求做同样的事情吗?
    • @Sohaib 如果你说的是 XMLHttpRequest 对象,相信你可以使用 XMLHttpRequest.readyState 属性来识别请求的状态。不过,实现可能会略有不同。 developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2022-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多