我有一个Web应用程序,当用户导航离开站点时,需要保存(ajax调用)任何未保存的用户输入数据。
我正在使用" Fetch"在beforeunload事件监听器中执行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)
})
}

答案 0 :(得分:1)
我遇到了类似的问题,在将ajax调用设置为非异步时,它运行良好。
尝试将以下代码段添加到您的ajax调用中:
$.ajaxSetup({ cache: false })
$.ajaxSetup({ async: false })