ily*_*iuk 141 javascript ajax xmlhttprequest fetch-api
我知道fetch正在使用promises,它们都允许你向服务器发出AJAX请求.我已经读过fetch有一些额外的功能,这些功能在XMLHttpRequest(以及fetch polyfill中,因为它基于XHR)中不可用.fetch API有哪些额外功能?
Mar*_*rco 101
使用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/包含更详细的说明.
Knu*_*Knu 55
上面的答案很好,并提供了很好的见解,但我在谷歌开发者博客条目中分享了相同的意见,主要区别(从实际角度来看)是从内部承诺返回的便利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();
Run Code Online (Sandbox Code Playgroud)
我们可以通过承诺和现代语法来清理并编写更简洁易读的内容
fetch('./api/some.json')
.then((response) => {
response.json().then((data) => {
...
});
})
.catch((err) => { ... });
Run Code Online (Sandbox Code Playgroud)