我有一个js change事件,当用户离开控件时,它会通过Ajax请求保存数据。除非用户决定离开页面,否则此工作正常。然后Ajax没有完成,数据也没有保存。查看Ajax request with JQuery on page unload我看到如果我使请求同步,则Ajax请求将完成。我试过这个,它确实有效。但是,每当用户从页面上的控件移动到控件时我都会调用此更改事件,并且我不希望所有这些调用都是同步的。
我尝试使用Alert for unsaved changes in form检查未保存的数据。当存在未保存数据的控件时,这会触发beforeunload
函数正常,但我无法计算出beforeunload
函数中的内容。
关于我尝试过的任何事情或者我尝试过的任何事情我可能做错了什么的任何想法?我可以以某种方式获得触发和取消的隐形警报,而无需用户做任何事情吗?
答案 0 :(得分:3)
当用户离开页面时保存数据的唯一好方法是连续保存数据离线(localStorage),并在用户离开页面时未将数据保存到服务器时提醒用户。 localStorage的好处是,即使计算机崩溃或连接丢失,数据也会保存到浏览器中。当用户重新连接时,您可以将数据同步回服务器。
有关离线浏览器存储的更多信息:
https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage
http://diveintohtml5.info/storage.html
答案 1 :(得分:1)
触发在卸载功能中同步的SEPARATE ajax调用。这样当页面卸载时,第二个AJAX调用(即阻塞)将触发,并且在保存完成之前页面将不会卸载,并且您的原始异步AJAX调用将保留用于页面的其余部分