【问题标题】:AJAX call on onbeforeunload to save dataAJAX 调用 onbeforeunload 来保存数据
【发布时间】:2011-11-17 09:01:35
【问题描述】:

我有一个页面,用户在其中执行一些活动(添加/更新/删除)并在卸载页面(实际上是刷新/导航离开)时进行 AJAX 调用以保存数据。 下面是代码;

window.onbeforeunload = function () {
         someAjaxObj.saveFavorites(json,{async:false});  // use async:false else callback is returned to an unloaded page creating a dwr javascript error
   }

现在由于某些原因,在 iPad Safari 上刷新后数据不会保存/反映。 我尝试将 iPad 的“onbeforeunload”更改为“pagehide”,但刷新后数据仍然没有反映..

另外只是添加AJAX调用,其实是DWR(Direct Web Remoting)调用。

请建议我如何解决此问题。

【问题讨论】:

    标签: javascript ajax ipad safari dwr


    【解决方案1】:

    在 onbeforeunload 事件中唯一可以做的事情是询问用户是否要在之前保存(这是因为某些页面可能会在 onbeforeunload 时打开一个新窗口并发送垃圾邮件)!

    var saved = false;
    window.onbeforeunload = function () {
        if (!saved) return "If you leave the page now your changes won't be saved.";
    }
    

    我认为最好的解决方案是将更改的数据存储在一个 cookie 中,当用户进入页面并保存数据时,该 cookie 将被删除

    function getCookie(name) {
    var a = document.cookie.split(';');
    for(var i = 0; i < a.length; i++) {
        var s = a[i];
        while (s.charAt(0)==' ') s = s.substring(1,c.length);
        if (s.indexOf((name + "=")) == 0) return s.substr((name + "=").length, s.length);
    }
    return null;
    }
    if (getCookie("save")) //save datas
    

    【讨论】:

    • 谢谢您的回复...我不太确定您是否只是要求我在“onbeforeunload”上向用户显示一条消息...如果是这种情况,我还需要实际上保存数据..因为这是我编码保存数据的唯一地方...而且我无法对该行为进行任何修改...例如添加保存按钮或其他东西...
    • 再次感谢...但我不太明白您要对 cookie 做什么...比如我们在什么时间点将数据保存到 cookie...是在页面卸载?如果是的话,我们是否可能面临与以前相同的问题(即使用 pagehide)
    • 另外我想最终通过调用 saveFavorites() 将数据保存到数据库中
    • 不,一旦 cookie 中的某些内容(作为 json 字符串)发生更改,如果有人会转到另一个链接,就像他离开页面并再次输入一样,当他进入页面您检查是否存在 json 字符串中更改数据的 cookie 您保存数据 以便在新页面加载时保存数据
    【解决方案2】:

    Mobile Safari 甚至根本不支持 onbeforeunload。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 2023-03-21
      相关资源
      最近更新 更多