window.onbeforeunload,关闭浏览器和同步AJAX
window.onbeforeunload, closing browser and synchronous AJAX
我一直在寻找同步 AJAX 有意义的情况的任何合理示例。我发现了这个问题,作者提到了window.onbeforeunload
并声称,如果 AJAX 调用是异步的,"请求永远不会停止"。
有人能解释一下吗?我的意思是 - 当用户想要关闭选项卡时,window.onbeforeunload
被触发。必须发生什么才能使选项卡仍然活着,即使有人单击关闭它?有人可以举出更具体的例子吗?
他没有说请求永远不会停止;他说它永远不会完成。也就是说,您的代码没有希望得到响应,因为执行环境(窗口)将在发生这种情况之前消失。
当window.onbeforeunload
以真值退出时,选项卡将关闭。因此,只要它正在运行,页面就会等待返回值,而不是关闭。这允许发送同步 AJAX,并接收和处理响应。如果请求是异步的,则代码构造 XHR 对象,然后退出,页面(和代码)消失。
我从未对此进行测试,但回答者显然相信(而且我认为这并非不合理)该页面可能不会停留足够长的时间以发送异步 XHR,更不用说接收响应了。因此,如果要确保服务器收到用户关闭页面的信息,则需要使请求同步。
必须卸载发生什么才能使选项卡仍然活着,即使有人单击关闭它?有人可以举出更具体的例子吗?
时发送同步XMLHttpRequest
是保证在用户代理卸载页面时传递会话数据的唯一方法(并且可能永远不会再次访问您的网站)。这有两种具体情况:
- 跟踪 - 跟踪和报告用户页面访问的总会话时间。
- 批处理 - 合并和延迟批处理会话数据的传递,以减少服务器请求数。
信标规范(navigator.sendBeacon
)旨在优化这种特定情况,使得发送异步请求成为可能,即使在页面卸载后仍然保证仍然完成。
相关文章:
- 如何模拟同步ajax调用?(基于异步的同步)
- 使用同步ajax调用加载屏幕
- 同步 Ajax 请求将导致页面上出现任何问题
- 同步AJAX(失信)
- 使用jsonp解决方法进行同步ajax调用
- 使用jQuery同步Ajax请求;我不能在Adobe Air上工作
- 通过递归循环同步ajax请求
- 将同步 AJAX 逻辑替换为异步逻辑
- window.onbeforeunload,关闭浏览器和同步AJAX
- 有没有办法同步 ajax 调用
- 没有同步 ajax 的弹出窗口
- 如何将同步 ajax 调用替换为凭据以保持应用状态稳定
- ASP.NET 对同步 AJAX 请求的 MVC 操作
- 如何使用同步 ajax 请求将音频转换为 arrayBuffer
- Web 视图中的同步 Ajax 超时
- JavaScript同步Ajax请求习语
- 同步Ajax请求”;锁定“;浏览器
- 使用JSONP同步AJAX请求
- 无阻塞同步AJAX
- Chrome中同步AJAX调用冻结前的代码