【问题标题】:Window.onUnload inconsistently sends results to serverWindow.onUnload 不一致地向服务器发送结果
【发布时间】: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 我可以看到有时我收到了请求,但我没有任何浏览器设置。

标签: javascript onbeforeunload onunload


【解决方案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 数据。
  • 谢谢!我将如何阅读这个服务器端?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2016-07-31
  • 1970-01-01
相关资源
最近更新 更多