我正在尝试发送PUT
请求于unload
事件,但是请求总是被取消。
这里的答案表明它是
-
不可能:如何在页面卸载时执行ajax调用? https://stackoverflow.com/questions/29847151/how-to-perform-an-ajax-call-on-page-unload
-
可能的:如何在页面卸载/离开时发送 AJAX 请求? https://stackoverflow.com/questions/7614756/how-do-i-send-an-ajax-request-upon-page-unload-leaving
我可以在卸载时发送 AJAX 请求吗?如果可以,我怎样才能不被取消。
注意:我不关心回应,我不需要回应。只需要向服务器发送一些信息,说明页面已关闭,无需进行保持活动检查。
这个问题是重复的(我当时就应该意识到这一点)。我已经发布了这个答案的一个版本here https://stackoverflow.com/a/72214403/157247关于另一个问题并将其设为社区维基。
在页面卸载处理程序中执行标准 ajax 调用会被浏览器主动禁用,因为等待它完成会延迟窗口中发生的下一件事(例如,加载新页面)。虽然您不能用它执行 PUT,但卸载处理程序中同步 ajax 的替代品是sendBeacon https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon. sendBeacon
让您将数据发送到您的服务器without举起您正在执行此操作的页面:
window.addEventListener("unload", function() {
navigator.sendBeacon("/log", yourDataHere);
});
浏览器将发送数据without阻止/延迟窗口中发生的任何事情(关闭窗口、移动到新页面等)。
信标是 POST,而不是 PUT,但除此之外,它正是您正在寻找的。
请注意,unload
事件可能不可靠,尤其是在移动设备上。您可以将上述内容与发送信标结合起来visibilitychange https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilitychange_event以及。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)