我知道 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(例如 Cache 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模式上面的答案很好并且提供了很好的见解,但我与这个谷歌开发者博客条目中分享的观点相同,主要区别(从实际角度来看)是从返回的内置承诺的便利性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) => { ... });