我需要确保当有人重新加载或关闭我的页面时,他们的进度会被保存。为了节省进度,我做了一个POST
via XMLHttpRequest()
,将数据发送到服务器。我在一个事件中触发了这个saveData()
函数。window.onbeforeunload
问题是,它会进行saveData()
一些计算,然后调用 asendData(content)
来最终实际发布数据。如果我正在处理和发送的数据很大(> 100kB),则窗口似乎在所有数据都通过服务器之前关闭。(我正在发送一张图片,有时我在另一边只收到一半)
http请求是同步的xhr.open("POST", url, false)
,但这似乎并没有削减它。
所以我的问题是,如何防止 onbeforeunload 函数终止 UNTIL xhr.readyState == 4
?我如何让它等待那个事件?
哦,而且setTimeout()
不会工作。窗口将在“时间”到来之前关闭。
这不起作用:
if (!jQuery) {
setTimeout(attachCode, 100);
return;
} else {
// continue and close
}
感谢您的任何见解!
PS:这不应该是“坏习惯”,因为它只需要几秒钟,我不希望用户必须手动保存。此外,在他工作时保存(如在他关闭窗口之前)会减慢应用程序的速度,所以我不能这样做。
[编辑] 作为一种临时措施,如果用户决定留在页面上,我会使用这个技巧来自动保存数据。但是,我真的不想使用任何警报消息。:(