繁体   English   中英

window.onbeforeunload,关闭浏览器和同步AJAX

[英]window.onbeforeunload, closing browser and synchronous AJAX

当同步AJAX有意义时,我一直在寻找这种情况的任何合理示例。 我发现了一个SO问题 ,作者在其中提到window.onbeforeunload并声称,如果AJAX调用是异步的,则“请求永远不会停止”。

有人可以解释吗? 我的意思是-当用户想要关闭选项卡时会触发window.onbeforeunload 即使有人单击关闭了该标签,该怎么办才能使该标签仍然有效? 有人可以举更具体的例子吗?

他没有说要求永远不会停止 ; 他说永远不会完成 也就是说,您的代码没有希望再返回响应,因为执行环境(窗口)将在此之前消失。

window.onbeforeunload以真实值退出时,该选项卡将关闭。 因此,只要页面正在运行,页面就在等待返回值,而不是关闭。 这允许发送同步AJAX,并接收和处理响应。 如果请求是异步的,则代码构造XHR对象,然后退出,页面(和您的代码)消失。

我从未对此进行过测试,但应答者显然认为(并且我认为这是不合理的)页面可能停留的时间不够长,甚至无法发送异步XHR,更不用说接收响应了。 因此,如果要确保服务器收到用户已关闭页面的信息,则希望使请求同步。

即使有人单击关闭了该标签,该怎么办才能使该标签仍然有效? 有人可以举更具体的例子吗?

在卸载时发送同步XMLHttpRequest是保证在用户代理卸载页面时传递会话数据的唯一方法(并且可能永远不会再次访问您的站点)。 有两种特定的情况:

  1. 跟踪 -跟踪和报告用户页面访问的总会话时间。
  2. 批处理 -合并和推迟批处理会话数据的交付,以减少服务器请求的数量。

信标规范navigator.sendBeacon )旨在优化此特定情况,从而即使在页面卸载后也可以发送保证仍然完成的异步请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM