问题描述
我试图让用户在尝试离开页面时收到警报,并在他们离开时发出发布请求,如果没有,则什么都不做。这是我的代码(使用 JQuery):
$(window).on("unload",function() {
$.post("/delete-room",{
roomID: roomId
});
});
$(window).on("beforeunload",function() {
return true
})
我(我的服务器)有时会收到发布请求,但在我关闭选项卡/卸载页面时只有大约 1/5 次。这种不一致是否有原因?谢谢
解决方法
不幸的是,在 unload
或 onBeforenUnload
事件处理程序中进行 ajax 调用是不可靠的。大多数调用永远不会到达后端。考虑改用 sendBeacon。
$(window).on("unload",function() {
var formData = new FormData();
formData.append('roomID',roomId);
navigator.sendBeacon("/delete-room",formdata);
});
无论发生什么(关闭标签页或窗口、移动到新页面等),浏览器都会POST
获取数据,而不会阻止或延迟。