【发布时间】:2014-12-01 02:20:07
【问题描述】:
我有一个 js 更改事件,它在用户离开控件时通过 Ajax 请求保存数据。除非用户决定离开页面,否则这很好用。然后 Ajax 没有完成,数据也没有保存。查看Ajax request with JQuery on page unload 我看到如果我使请求同步,Ajax 请求将完成。我已经尝试过了,它确实有效。但是,每当用户在页面上从一个控件移动到另一个控件时,我都会调用此更改事件,并且我不希望所有这些调用都是同步的。
我尝试使用Alert for unsaved changes in form 检查未保存的数据。当有一个未保存数据的控件时,这会很好地触发beforeunload 函数,但是我无法弄清楚在beforeunload 函数中放入什么。
- 我可以发出警报。当用户取消警报时,我的更改代码运行并且一切都很好。但是,当用户正常保存数据而无需执行任何操作时会弹出一个对话框,这对用户来说很烦人且令人困惑
- 我尝试Using jQuery to test if an input has focus 找到具有焦点的元素,然后强制我的更改功能在此运行。但是,我找不到有焦点的元素(可能这里做错了什么?)
- 我尝试使用睡眠功能让 Ajax 调用有时间运行,但这也不起作用
- 我尝试将焦点设置到另一个控件 - 没有运气
对于我还可以尝试什么或我尝试过的任何事情可能做错了什么有什么想法吗?我能否以某种方式在用户无需执行任何操作的情况下触发和取消不可见的警报?
【问题讨论】:
-
没有可靠的方法来做到这一点,原因很充分:如果 Ajax 请求可能导致浏览器在离开页面之前等待,那么一个聪明的站点可能会导致无法离开页面。无限期的页面。这可能而且会被不良行为者滥用。伊兹的以下建议很好。设计您的应用程序时假设用户可以随时离开,或者他们的互联网连接可能会丢失。阅读Offline First! 了解更多最佳实践。
标签: javascript jquery ajax