【发布时间】:2017-06-03 12:02:40
【问题描述】:
我一直在努力编写能够在关闭选项卡窗口时可靠地发出 POST 请求的代码。 Navigator.sendBeacon 似乎正是我所需要的(我只要求它适用于 Google Chrome)。
$(global).bind('unload', function () {
let body = {
UserEmail: appState.user.email,
Job: {
Id: appState.jobId
},
Timestamp: '/Date(' + new Date().getTime() + ')/',
EventOrigin: 'PdfReviewClient',
Event: 'JobClosed'
};
let headers = {
Authorization: `JWT ${authenticationState.token}`,
'Content-Type': 'application/json; charset=utf8'
};
let blob = new Blob([JSON.stringify(body)], headers);
navigator.sendBeacon(configuration.rootApiUrl + 'jobevents', blob);
});
我的信标包含自定义标头,这就是我创建 Blob 的原因。
但是,这个请求似乎没有发生。由于窗口关闭,这特别难以调试。所以问题是,为什么我的信标没有发送?
【问题讨论】:
-
我假设您验证了请求是在浏览器关闭时未完成时发生的?
-
@Jorg 是的,我有。好主意,感谢您的检查,但在这种情况下,这不是问题。
-
卸载本身也会触发吗?您也许可以使用
alert对其进行测试,看看它是否会阻止窗口关闭 -
@Jorg 我无法使用
alert进行测试(可能不允许,因为它是not allowed in onbeforeunload(请参阅注释部分)),但我可以通过代码进行调试。跨度>
标签: javascript window onbeforeunload navigator onunload