Fetch
作为浏览器提供的原生 AJAX
接口。还是值得我们去探究一下的。这里有一篇关于Fetch
应用特别好的博文,所以,我啥也不说了👇
传统 Ajax 已死,Fetch 永生
你可能会说,我们用axios就好了,它也基于promiss
。其实我也是,目前项目中都是用axios
,还没有应用过Fetch
。但是它们直接的区别还是应该了解一下的。发现一篇非常全面的好文,所以,我啥也不说了👇
Ajax,jQuery ajax,axios和fetch介绍、区别以及优缺点
有人吐槽Fetch:
function addUser(details) {
return fetch('https://api.example.com/user', {
mode: 'cors', //fetch 默认不启用 CORS
method: 'POST',
credentials: 'include', // fetch 默认情况下不会发送 cookie
body: JSON.stringify(details), //JSON 必须先转换成字符串
headers: {
//必须设置 'Content-Type' 头部,指出实体的类型是 JSON,否则服务器会把它当做普通的字符串处理
'Content-Type': 'application/json',
'Accept': 'application/json',
// 用于防御xsrf攻击的 X-XSRF-TOKEN 头部 必须手动添加
'X-XSRF-TOKEN': getCookieValue('XSRF-TOKEN')
}
}).then(response => {
return response.json().then(data => {
// 只会在网络错误的情况下reject 错误状态码(比如404 500 )依然resove
if (response.ok) {
return data;
} else {
return Promise.reject({status: response.status, data});
}
});
});
}
个人觉得,Fetch作为原生API,纯粹是非常正确的。实际应用场景千差万别,你不能保证你默认增加的配置适应任何场景。我们只需要在实际项目做一些本土化的封装,这样所有配置均可见。即便我们用axios
,我们也经常这么做。