Window.onUnload 不一致地将结果发送到服务器

问题描述

我试图让用户在尝试离开页面时收到警报,并在他们离开时发出发布请求,如果没有,则什么都不做。这是我的代码(使用 JQuery):

$(window).on("unload",function() { 
    $.post("/delete-room",{
        roomID: roomId
    });
});
$(window).on("beforeunload",function() { 
    return true
})

我(我的服务器)有时会收到发布请求,但在我关闭选项卡/卸载页面时只有大约 1/5 次。这种不一致是否有原因?谢谢

解决方法

不幸的是,在 unloadonBeforenUnload 事件处理程序中进行 ajax 调用是不可靠的。大多数调用永远不会到达后端。考虑改用 sendBeacon

$(window).on("unload",function() { 
    var formData = new FormData();
    formData.append('roomID',roomId);
    navigator.sendBeacon("/delete-room",formdata);
});

无论发生什么(关闭标签页或窗口、移动到新页面等),浏览器都会POST 获取数据,而不会阻止或延迟。