gpt4 book ai didi

javascript - 如果由 window.onbeforeunload 触发,异步 ajax 查询会完成吗?

转载 作者:行者123 更新时间:2023-11-28 09:00:28 24 4
gpt4 key购买 nike

我已经对此进行了测试,似乎即使页面卸载,异步操作也会完成,无论选项卡是否关闭或选项卡是否导航到新的 URL。然而,它调用的服务器非常敏捷。

当异步进程运行和选项卡关闭时,幕后的进程是什么 - 此时浏览器将在页面已启动的异步进程上调用它退出?

最佳答案

您不能依赖服务器之间 onbeforeunload 和 onunload 内的异步调用行为。

我们有一个使用 Apache 服务器运行的应用程序 - 在我们的开发环境中运行 Windows,在发行版中运行 Unix。事实证明,当服务器配置为处理线程中的请求时(Windows/开发盒的默认设置),Ajax 将始终完成;当它被配置为处理进程中的请求时 - 默认情况下我们的 Unix/prod 环境,它总是会取消!

发生的情况是 Ajax 请求触发,然后浏览器卸载页面,从而关闭 Ajax 回复的连接。我们设置了一个测试,其中 Ajax 调用将在服务器上执行 4 秒的“ sleep ”以避免任何计时问题。看起来对于线程后端,Apache 直到从“ sleep ”返回后才注意到客户端关闭连接,而对于子进程后端,它立即中止 Ajax 调用。

答案是在 on[before]unload 事件处理程序中使用同步请求。这将使页面保持打开状态,直到请求完成。这确实意味着页面切换/重新加载/返回时会产生额外的延迟...

...而且您也不能保证下一个页面会看到该请求的结果 - 似乎某些浏览器会在触发 onunload 事件之前获取下一页!但这是另一个问题的主题。

关于javascript - 如果由 window.onbeforeunload 触发,异步 ajax 查询会完成吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17806777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com