获取 API 与 XMLHttpRequest

新手上路,请多包涵

我知道 Fetch API 使用 Promise s 并且它们都允许您对服务器执行 AJAX 请求。

我读过 Fetch API 有一些额外的功能,这些功能在 XMLHttpRequest 中不可用(在 Fetch API polyfill 中,因为它基于 XHR )。

Fetch API 有哪些额外的功能?

原文由 ilyabasiuk 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 374
2 个回答

您可以使用 fetch 而不是 XHR 来做一些事情:

  • 您可以将缓存 API 与请求和响应对象一起使用;
  • 您可以执行 no-cors 请求,从未实现 CORS 的服务器获取响应。您不能直接从 JavaScript 访问响应主体,但可以将其与其他 API(例如 Cache API)一起使用;
  • 流式响应(使用 XHR,整个响应都缓冲在内存中,使用 fetch,您将能够访问低级流)。这在所有浏览器中尚不可用,但很快就会可用。

有一些事情你可以用 XHR 做,而你不能用 fetch 做,但它们迟早会可用(阅读这里的“未来改进”段落: https://hacks.mozilla .org/2015/03/this-api-is-so-fetching/ ):

  • 中止请求(正如@sideshowbarker 在他的评论中解释的那样,这现在适用于 Firefox 和 Edge);
  • 报告进展。

本文 https://jakearchibald.com/2015/thats-so-fetch/ 包含更详细的描述。

原文由 Marco Castelluccio 发布,翻译遵循 CC BY-SA 3.0 许可协议

拿来

  • 缺少使用文档的内置方法
  • 没有 办法设置超时
  • 无法覆盖内容类型响应标头
  • 如果内容长度响应标头存在 _但未公开_,则主体的总长度在流式传输期间未知
  • 即使 请求已经完成,也会调用信号的中止处理程序
  • 没有上传进度(支持 ReadableStream 请求体实例 尚未到来
  • 不支持 --allow-file-access-from-files (铬)

XHR

  • 没有办法 发送 cookie(除了使用 非标准 mozAnon 标志AnonXMLHttpRequest 构造函数)
  • 无法返回 FormData 实例
  • 没有等同于 fetchno-cors 模式
  • 始终遵循重定向

原文由 Knu 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题