ajax、axios、fetch有什么区别
要了解这个问题,需要先知道这三者到底是什么,以及他们之间的关系
Ajax
简介:
AJAX 全称为 Asynchronous JavaScript And XML,就是异步的 JS 和 XML。 通过 AJAX 可以在浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据
AJAX 不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式。Ajax只是个技术统称,可以用XMLHttpRequest来实现Ajax,也可以用Fetch来实现Ajax
特点:
1 优点
1.1 可以无需刷新页面而与服务器端进行通信。(局部刷新)
1.2 允许你根据用户事件来更新部分页面内容。
2 缺点
2.1 没有浏览历史,不能回退
2.2 存在跨域问题(同源)
2.3 SEO 不友好
XMLHttpRequest手写:
注:解决ie缓存问题
问题:在一些浏览器中(IE),由于缓存机制的存在,ajax 只会发送的第一次请求,剩余多次请求不会再发送给浏览器而是直接加载缓存中的数据。 解决方式:浏览器的缓存是根据 url地址来记录的,所以我们只需要修改 url 地址 即可避免缓存问题 xhr.open("get","/url?t="+Date.now());
Axios
简介:
axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,axios本质上也是对原生XHR(XMLHttpReques)的封装,只不过它是基于Promise的,是Promise的实现版本,符合最新的ES规范
特点:
1 从浏览器创建 XMLHttpRequests请求 2 从node.js创建http请求 3 支持 Promise API 4 拦截请求和响应,比如:在请求前添加授权和响应前做一些事情。 5 转换请求数据和响应数据,比如:进行请求加密或者响应数据加密。 6 取消请求 7 自动转换JSON数据 8 客户端支持防御XSRF
使用:
官网地址:www.axios-http.cn/docs/api_in…
Fetch
简介:
fetch()是 XMLHttpRequest 的升级版,用于在 JavaScript 脚本里面发出 HTTP 请求,浏览器原生提供这个对象。
特点:
fetch()使用 Promise,不使用回调函数,因此大大简化了写法,写起来更简洁。 fetch()采用模块化设计,API 分散在多个对象上(Response 对象、 Request 对象、Headers 对象),更合理一些; 相比之下,XMLHttpRequest 的 API 设计并不是很好, 输入、输出、状态都在同一个接口管理,容易写出非常混乱的代码。 fetch()通过数据流(Stream对象)处理数据,可以分块读取,有利于提高网站性能表现,减少内存占用,对于请求大文件或者网速慢的场景相当有用。
使用:
// 请求的网址
let url = '网址';
//发起get请求
- [ ] List item
let _fetch = fetch(url).then(function (response) {
//response.status表示响应的http状态码
if (response.status === 200) {
// json是返回的response提供的一个方法,
// 会把返回的json字符串反序列化成对象,也被包装成一个Promise了
return response.json();
} else {
return {};
}
});
_fetch = _fetch
.then(function (data) {
//响应的内容
console.log(data);
// 响应数据格式化
console.log(data.json());
})
.catch(function (err) {
console.log(err);
});`
最后总结:
AJAX、Axios和Fetch都是用于在浏览器中与服务器进行异步通信的技术,但它们之间存在一些区别:
AJAX(Asynchronous JavaScript And XML):AJAX是一种技术统称,它可以通过XMLHttpRequest对象来实现。 AJAX的主要优点是可以在不刷新页面的情况下与服务器端进行通信,并根据用户事件更新部分页面内容。缺点是存在跨域问题,SEO不友好,且在某些浏览器中可能存在缓存问题。
Axios:Axios是一个基于Promise的HTTP客户端,既可以在浏览器中使用,也可以在Node.js中使用。Axios的特点包括支持Promise API、拦截请求和响应、转换请求数据和响应数据、取消请求、自动转换JSON数据以及客户端支持防御XSRF等。使用Axios可以简化代码,提高可读性和可维护性。
Fetch:Fetch是XMLHttpRequest的升级版,用于在JavaScript脚本中发出HTTP请求。Fetch的特点包括使用Promise、模块化设计、通过数据流处理数据等。Fetch的API更加简洁,易于理解和使用。