我知道 Fetch API 使用Promises 并且它们都允许您向服务器发出 AJAX 请求。
我已经读到 Fetch API 有一些额外的功能,这些功能在XMLHttpRequest(和 Fetch API polyfill中不可用,因为它基于XHR)。
Fetch API 有哪些额外的功能?
我知道 Fetch API 使用Promises 并且它们都允许您向服务器发出 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) => { ... });