Javascript 同步XHR弃用

Javascript 同步XHR弃用,javascript,ajax,asynchronous,synchronous,Javascript,Ajax,Asynchronous,Synchronous,根据async:false不推荐使用,现代用户代理应该开始警告异常,甚至抛出异常 workers外部的同步XMLHttpRequest正在从web平台中删除,因为它对最终用户的体验有不利影响。(这是一个耗时多年的漫长过程。)当JavaScript全局环境是文档环境时,开发人员不得为异步参数传递false。强烈鼓励用户代理对开发人员工具中的此类使用发出警告,并在出现InvalidAccessError异常时尝试抛出该异常 我理解并同意关于“有害”影响的论点。此建议的要点是您可以使用异步XHR解决任

根据
async:false不推荐使用,现代用户代理应该开始警告异常,甚至抛出异常

workers外部的同步XMLHttpRequest正在从web平台中删除,因为它对最终用户的体验有不利影响。(这是一个耗时多年的漫长过程。)当JavaScript全局环境是文档环境时,开发人员不得为异步参数传递false。强烈鼓励用户代理对开发人员工具中的此类使用发出警告,并在出现InvalidAccessError异常时尝试抛出该异常

我理解并同意关于“有害”影响的论点。此建议的要点是您可以使用异步XHR解决任何任务。但是,我可以在浏览器中看到至少两个同步XHR应用程序:

1) window.onbeforeunload。任何异步xhr在这里都是无用的,因为浏览器选项卡将立即关闭。onbeforeunload事件中使用XHR的示例是文档“锁”。用户在新选项卡中打开了文档,文档现在被他锁定。每个人都可以只读方式查看此文档。然后用户关闭选项卡,文档应该解锁。我看不到任何异步请求的解决方案,除非用户代理保证将执行该异步请求,而且在选项卡关闭后不会中止该请求

2) 单击锚点上的事件(
标记)。这与前一个案例很相似,因为它还关闭了同一选项卡中的“创建新窗口”中的当前窗口。比方说,我只想跟踪页面上关键链接的点击(但我相信还有更多关于此事件同步使用的高尚示例)。解决方法之一是在处理程序中执行e.preventDefault(),然后手动分配位置,但这可能会破坏鼠标中键行为(强制打开新选项卡)

问题是: 1) 即使选项卡已关闭,用户代理是否也必须完成异步XHR?
2) 对于我的示例,还有更多的智能解决方案吗?

对于保证在页面卸载之前发送HTTP数据的特定情况,请查看实验性解决方案。MDN甚至有一个讨论这个用例的团队


这是一个异步API,但它保证通过它发送的任何数据都将在页面卸载后发送。

您描述的基本问题源于对HTTP客户机-服务器系统本质的错误认识。您必须在不知道客户端何时消失的情况下设计软件。@KevinB是的,但您不能阻止我(客户端)禁用JavaScript或拔出计算机的插头。@KevinB实际上我描述了这种解决方法,但谢谢。一种可能很重的替代方法是使用。由于它们保持连续的连接,服务器可以识别客户机何时请求或强制关闭连接。@Pointy这一点很好,谢谢。但我仍然认为,对于小型应用程序来说,如上所述,创建websocket频道来跟踪用户是一种过分的做法。一个轻量级的同步请求就足够了。看起来是一个完美的选择。遗憾的是,到目前为止,它对浏览器的支持还很差,但我相信当syncxhr停止工作时,它会更好。