2011-11-17 24 views
0

我有一个页面,用户执行一些活动(添加/更新/删除)和卸载页面(实际上刷新/导航了)我做了一个AJAX调用来保存数据。 以下是代码;AJAX调用onbeforeunload保存数据

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上刷新后数据不会保存/反映出来。 我试着改变“onbeforeunload”为iPad的“pagehide”,但仍然没有反映数据刷新后。

也只是添加AJAX调用实际上是一个DWR(直接Web Remoting)调用。

请建议我如何解决这个问题。

回答

0

只有你可以在onbeforeunload事件中做的事情是询问用户他是否想要保存之前(这是因为一些页面可能会打开一个新的窗口onbeforeunload和垃圾邮件与它)!

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

我认为最好的解决办法是,当用户进入页面存储在其中将被删除coockie更改的数据和的数据都是保存

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 
+0

Thx for your reply ...我不太确定你是否只是要求我在“onbeforeunload”上向用户显示一条消息......如果是这样的话,我还需要实际保存数据。 .coz这是我编码保存数据的单一位置...另外,我将无法对该行为进行任何修改...例如添加保存按钮或其他内容... – testndtv

+0

确定我修改了我的答案 – noob

+0

Thx再次......但我不太明白你想要用cookie来做什么......就像我们在什么时候将数据保存到cookie中一样......是否在页面卸载期间?如果是的话,我们是不是可能面临同样的问题(即使用页面隐藏) – testndtv

0

移动Safari浏览器甚至不完全支持onbeforeunload。