javascript - 同步 XHR 弃用

标签 javascript ajax asynchronous synchronous

根据 xhr specs async: false已弃用,现代用户代理应该开始警告甚至抛出异常。

Synchronous XMLHttpRequest outside of workers is in the process of being removed from the web platform as it has detrimental effects to the end user's experience. (This is a long process that takes many years.) Developers must not pass false for the async argument when the JavaScript global environment is a document environment. User agents are strongly encouraged to warn about such usage in developer tools and may experiment with throwing an InvalidAccessError exception when it occurs.

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

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

2) anchor 上的点击事件(<a> 标签)。它与之前的情况很接近,因为它还会关闭当前窗口以在同一选项卡中创建新窗口。假设我只想跟踪页面上关键链接的点击(但我相信有更多关于此事件同步用法的好例子)。一种解决方法是在处理程序中执行 e.preventDefault(),然后手动分配位置,但这会破坏鼠标中键的行为(强制打开新选项卡)。

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

最佳答案

关于保证在页面卸载之前发送 HTTP 数据的具体情况,请查看实验 Beacon API . MDN 甚至有一个 specific article讨论这个用例。

它是一个异步 API,但它保证通过它发送的任何数据即使在页面卸载后也会发送。

关于javascript - 同步 XHR 弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29282869/

相关文章:

android - ajax 调用在使用 phonegap 的 android 应用程序中不起作用

javascript - 在 ASP MVC 5 中使用 AJAX 时,HttpPostedFileBase 为空

javascript - react : Wait until all assets are loaded

javascript - 滚动到时更改元素类别

javascript - 带录音机js的录音机

javascript - 混色器 (javascript)

javascript - WebSocket JavaScript : Sending complex objects

php - 使用 AJAX 将表单数据存储在 PHP 变量中,以修改 MySQL 查询

c# - Metro - 编写异步 c# 操作并从 javascript 调用

c# - ToListAsync() 根本没有完成