我的问题是,当我调用一个函数监听事件onBeforeUnload()时,我想发布数据。问题是我的请求未经授权。我需要将承载添加到某个地方,但是我不知道如何。
这是我的实际代码:
@HostListener('window:beforeunload', ['$event'])
onBeforeUnload(): void {
navigator.sendbeacon(`${localhost:8080/apiRest}`, infoIWantToSent);
}
目前,该请求发送的是401:unhautorized,这很正常,因为我没有传输任何承载。
答案 0 :(得分:0)
尝试一下:
let headers = {
Authorization: 'Bearer ' + token
};
let blob = new Blob([JSON.stringify(infoIWantToSent)], headers);
navigator.sendBeacon('url', blob);
答案 1 :(得分:0)
我找到了这个解决方案:
@HostListener('window:beforeunload', ['$event'])
onBeforeUnload(): void {
fetch('url', {
keepalive: true,
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`,
},
body: JSON.stringify(infoIWantToSent),
});
}
显然,如果必须使用令牌连接,则不能使用navigator.sendbeacon()https://w3c.github.io/beacon/#sec-sendBeacon-method 它适用于几乎所有情况,但是当我关闭包含我的页面的iframe时无效。