fetch和ajax、axios对比
fetch和ajax、axios对比
axios
和ajax
是对XMLHttpRequest
的封装,而fetch
是一种新的获取资源的接口方式,并不是对XMLHttpRequest
的封装。
它们最大的不同点在于Fetch是浏览器原生支持,而Axios需要引入Axios库。ajax需要引入Jquery
用法比较
- axios
axios({
url: "http://baidu.com/",
method: "POST",
headers: {
Accept: "application/json",
"Content-Type": "application/json;charset=UTF-8",
},
timeout: 4000,
data: {
a: 10,
b: 20,
},
}).then((response) => {
console.log(response);
}).catch((error) => {
console.log("请求异常");
});
- fetch
fetch("http://baidu.com/", {
method: "POST",
headers: {
Accept: "application/json",
"Content-Type": "application/json;charset=UTF-8",
},
body: JSON.stringify({
a: 10,
b: 20,
})).then((response) => {
console.log(response);
}).catch((error) => {
console.log("请求异常");
});
- ajax
$.ajax({
type: 'POST',
url: "http://baidu.com/",
data: {
a: 10,
b: 20,
},
success: function (response) {
console.log(response);
},
error: function (error) {
console.log("请求异常");
}
});
由上可以看出:最大的不同之处在于传递数据的方式不同,axios
是放到data
属性里,以对象的方式进行传递,而fetch
则是需要放在body
属性中,以字符串的方式进行传递。而ajax
处理返回的是通过options
中传入回调的方式。
返回数据处理
axios
会自动对数据进行转化,而fetch
则不同,它需要使用者进行手动转化。
// axios
axios.get("http://baidu.com/").then((response) => {
console.log(response.data);
});
// fetch
fetch("http://baidu.com/").then((response) =>{
// 提供了多种转化方法
/*
* arrayBuffer()
blob()
json()
text()
formData()
*/
response.json() // 需要对响应数据进行转换
}).then((data) => {
console.log(data);
})
拦截器
拦截器是一个非常重要的功能,请求拦截,响应拦截。 axios
提供了成熟的拦截器。我们可以直接方便使用。
- axios
axios.interceptors.request.use((config) => {
// 在请求之前对请求参数进行处理
config.headers.Authorization = getToken() // 添加token
return config;
});
axios.interceptors.response.use((response) => {
// 统一异常处理
})
而 fetch
没有这方面的技术支持。需要我们自己重写全局fetch。
- fetch
fetch = ((originalFetch) => {
return (...arguments) => {
const result = originalFetch.apply(this, arguments);
return result.then(console.log("请求已发送"));
};
})(fetch);
在使用 jQuery
的项目中,如果要对所有的请求统一设置一些参数的话,可以设置拦截器 $.ajaxSetup
,
$.ajaxSetup
的参数和 $.ajax
的参数一样
$.ajaxSetup({
headers: {
"token": getToken()
}
});
由上可以看出 axios
还是更加完整好用。
并发
axios
提供了并发支持。fetch
和ajax
没有,需要自己封装。
axios.all([
axios.get("https://test1.com"),
axios.get("https://test2.com"),
]).then(
axios.spread((res1, res2) => {
// 分别处理
})
);
兼容性&浏览器原生支持
axios
可以兼容IE浏览器,而fetch
在IE浏览器和一些老版本浏览器上没有受到支持,但是有一个库可以让老版本浏览器支持Fetch即它就是whatwg-fetch
,它可以让你在老版本的浏览器中也可以使用fetch
,并且现在很多网站的开发都为了减少成本而选择不再兼容IE
浏览器。fetch
受到浏览器原生支持。无需引入依赖包。这可能是fetch
唯一的优势。
总结
fetch
是一个低层次的API,你可以把它考虑成原生的XHR,所以使用起来并不是那么舒服,需要进行封装。但是可以通过封装完成所有axios
所有的功能。
ajax
的使用需要引入庞大的Jquery
。是阻拦它流行的最大原因。并且本身是针对MVC
的编程,不符合现在前端MVVM
的浪潮。势必会慢慢成为历史。
axios
还是开箱即用。而且文档齐全。任然是现在最流行的网络请求技术。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)