Window.onUnload 不一致地向服务器发送结果
Posted
技术标签:
【中文标题】Window.onUnload 不一致地向服务器发送结果【英文标题】:Window.onUnload inconsistently sends results to server 【发布时间】:2021-04-21 01:38:45 【问题描述】:我试图让用户在尝试离开页面时收到警报,并在他们离开时发出发布请求,如果没有,则不执行任何操作。这是我的代码(使用 JQuery):
$(window).on("unload", function()
$.post("/delete-room",
roomID: roomId
);
);
$(window).on("beforeunload", function()
return true
)
我(我的服务器)有时会收到发布请求,但在我关闭选项卡/卸载页面时只有大约 1/5 次。这种不一致是否有原因?谢谢
【问题讨论】:
服务器端代码中没有显示的内容?另外,如果用户将他们的浏览器配置设置为“无”将在窗口/选项卡关闭时以 javascript 方式运行,则您无法控制。 @GetSet 我可以看到有时我收到了请求,但我没有任何浏览器设置。 【参考方案1】:不幸的是,在 unload
或 onBeforenUnload
事件处理程序中进行 ajax 调用是不可靠的。大多数调用永远不会到达后端。考虑改用sendBeacon。
$(window).on("unload", function()
var formData = new FormData();
formData.append('roomID', roomId);
navigator.sendBeacon("/delete-room", formdata);
);
浏览器将POST
数据不会阻止或延迟,无论发生什么(关闭选项卡或窗口,移动到新页面等)。
【讨论】:
非常感谢!现在,post 调用始终如一地到达服务器,但是,服务器将正文输出为
。这是有原因的吗?
(请注意,我正在尝试将 JSON 发送到服务器)。谢谢!
我认为数据必须作为formdata传递。
我编辑了我的回复以修复将数据传递给sendBeacon()
函数的方式,因为不支持 JSON 数据。
谢谢!我将如何阅读这个服务器端?以上是关于Window.onUnload 不一致地向服务器发送结果的主要内容,如果未能解决你的问题,请参考以下文章
window.onunload() 在 Firefox 中不起作用?在IE中工作?