【发布时间】:2017-01-07 20:55:44
【问题描述】:
我有一个 Web 应用程序,当用户离开网站时,它需要保存(ajax 调用)任何未保存的用户输入数据。
我在 beforeunload 事件监听器中使用“Fetch”来执行 ajax 调用(保存数据)。但是浏览器似乎取消了 ajax 调用(当我查看 Chrome 的网络面板时,预检 OPTIONS 调用被取消了)。
jquery 有一种发送同步 ajax 调用的方法,但已被弃用。此外,一种解决方法是弹出浏览器指示的提示消息,让用户通过 beforeUnload 事件确认导航,但这不是业务需求的首选。
那么有没有办法让 Ajax 调用通过?
我的代码示例如下。 :
window.addEventListener('beforeunload', beforeUnloadHandler);
beforeUnloadHandler(event) {
fetch(url, {
method: 'PUT',
credentials: 'include',
headers: {
'Content-Type': 'application/json',
Authorization: api.AUTHORIZATION_HEADER
},
body: JSON.stringify(data)
})
}
【问题讨论】:
-
@RamblinRose 谢谢。根据您提到的帖子进行实验。添加 setTimeout 似乎是一个很好的解决方法,因为如果用户选择留在页面上,保存可能会“自动”发生。
标签: javascript ajax onbeforeunload