Ajax Fetch Axios 的区别
-
相同点
均适用于网络请求,但是在不同维度
-
不同点
-
AJAX
一个技术统称,使用XMLHttpRequest来实现构建更复杂,动态的网页的编程实践。
ajax允许只更新一个HTML页面的部分DOM,而无须重新加载整个页面,支持异步工作,意味着网页一部分正试图重新加载时,代码可以继续运(相比之下,同步会阻止代码继续运行,直到这部分的网页完成重新加载)const client = new XMLHttpRequest(); // 用于指定HTTP请求的参数,或者初始化XMLHttpRequest实例对象 client.open('GET', 'demo.example'); client.setRequestHeader('X-Test', 'one'); client.setRequestHeader('X-Test', 'two'); // 监听状态改变,进行相应交互 client.onReadystatechange = function() { // readyState 0: unsent 1: opened 2: received 3:loading 4: done(完成) if(this.readyState === 4) { if(this.status === 200) { console.info('success:', '处理服务返回数据') } else { console.error(this.statusText) } } } // error事件 请求失败 client.onerror = function(e) { console.info(this.statusText) } // progressEvent请求监听事件 // HTTP请求发出 client.onloadstart = function() {} // 正在发送和加载数据 client.onprogress = function() {} // 请求终止,用户调用了abort()方法 client.onabort = function() {} // 请求成功完成 client.onload = function() {} // 请求完成,不管成功或失败 client.onloadend = function() {} client。timeout = function() {} client.send(null)
-
Fetch API
- 浏览器原生API,用于网络请求,提供对Request和Response对象的通用定义。
- 与XMLHttpRequest一个级别。
- Fetch api 语法简洁易用,支持promise。
fetch('demo.test') // fetch接受到的response是一个Stream对象 // res.json()是一个异步操作,去处所有内容,并将其转为JSON对象 .then(res => res.json()) // 获取json数据 .then(json => console.info(json)) .catch(err => console.info('Request Failed', err)) // 也可使用async await 形式1. 使用Promise,不用回调函数,大大简化写法,更简洁。
2. 采用模块化设计,API分散在多个对象上(Response,Request,Headers对象)。
3. 通过数据流(Stream对象)处理数据,可以分块读取有利于提高网站性能表现,减少内存占用,对于请求大文件或者网速慢的场景相当有用。 - 浏览器原生API,用于网络请求,提供对Request和Response对象的通用定义。
-
Axios 第三方库
- 内部可用Fetch和XMLHttpRequest来实现。
- 浏览器中创建XMLHttpRequest。
- nodejs中创建http请求。
- 支持request和response拦截。
- 支持Promise API。
- 支持客户端XSRF。
-
注: 实际项目中,axios为首选方式,没有特殊要求并不需要自己造轮子,懂原理,会实现,高效开发。