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】:

不幸的是,在 unloadonBeforenUnload 事件处理程序中进行 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中工作?

关于window.onload,window.onbeforeload与window.onunload

事件:卸载事件(onunload)

刷新或关闭时调用onbeforeunload

页面的卸载或者刷新事件

JS监听浏览器事件