我知道 Fetch API 使用Promise
s 并且它们都允许您向服务器发出 AJAX 请求。
我已经读到 Fetch API 有一些额外的功能,这些功能在XMLHttpRequest
(和 Fetch API polyfill中不可用,因为它基于XHR
)。
Fetch API 有哪些额外的功能?
我知道 Fetch API 使用Promise
s 并且它们都允许您向服务器发出 AJAX 请求。
我已经读到 Fetch API 有一些额外的功能,这些功能在XMLHttpRequest
(和 Fetch API polyfill中不可用,因为它基于XHR
)。
Fetch API 有哪些额外的功能?
你可以用 fetch 而不是 XHR 做一些事情:
no-cors
请求,从未实现 CORS 的服务器获取响应。您不能直接从 JavaScript 访问响应正文,但您可以将其与其他 API(例如缓存 API)一起使用;您可以使用 XHR 完成一些使用 fetch 无法完成的事情,但它们迟早会可用(阅读此处的“未来改进”段落:https://hacks.mozilla .org/2015/03/this-api-is-so-fetching/):
这篇文章https://jakearchibald.com/2015/thats-so-fetch/包含更详细的描述。
ReadableStream
请求主体的支持尚未到来)mozAnon
标志或AnonXMLHttpRequest
构造函数)FormData
实例fetch
的no-cors
模式上面的答案很好,提供了很好的见解,但我与谷歌开发者博客文章中的观点相同,主要区别(从实际角度来看)是从返回的内置Promise的便利性fetch
而不必像这样编写代码
function reqListener() {
var data = JSON.parse(this.responseText);
}
function reqError(err) { ... }
var oReq = new XMLHttpRequest();
oReq.onload = reqListener;
oReq.onerror = reqError;
oReq.open('get', './api/some.json', true);
oReq.send();
我们可以用promise和现代语法清理一些东西并写一些更简洁易读的东西
fetch('./api/some.json')
.then((response) => {
response.json().then((data) => {
...
});
})
.catch((err) => { ... });