AJAX
AJAX原理是用XMLHttpRequest对象来向服务器发起异步网络请求,从服务器获得数据,然后用JS来操作DOM更新页面。
Axios
Axios的原理是基于Promise封装的AJAX技术,是一个网络请求框架。它内部封装了请求拦截器和响应拦截器。请求拦截器用于在请求发出之前进行一些操作,比如:设置请求体,携带Cookie、token等;响应拦截器用于在得到响应后进行一些操作,比如:登录失效后跳转到登录页面重新登录。
Fetch
Fetch原理是使用Promise语法不使用回调函数,用于在JavaScript脚本里面发出HTTP请求,是浏览器自带的API。它是XMLHttpRequest的升级版也是单独的一个前端网络请求技术。
Fetch,AJAX,Axios 的区别
1.传统的AJAX利用的是XHMLHttpRequest这个对象,和后端进行交互。AJAX基于原生XHMLHttpRequest开发的多请求间有嵌套的话就会出现回调地狱的问题;AJAX本身针对的是MVC框架,不符合现在的MVVM架构;AJAX的配置和调用方式混乱且复杂;请求时得到的不是JSON数据,需要使用JSON数据就要进行额外的转换。
2.Axios使用Promise封装XHMLHttpRequest对象,Promise可以获取异步操作的消息,就将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数也就解决了回调地狱的问题。由浏览器端发起请求,在浏览器中创建XHMLHttpRequest对象;返回Promise对象,支持Promise API;可以对请求和响应进行监听;更好的格式化,自动将数据转换为JSON数据;安全性更高,可抵御CSRF攻击。
3.Fetch没有使用XHMLHttpRequest对象,直接使用的是Promise语法,方便使用异步,也没有回调地狱的问题。Fetch采用模块化结构设计,并使用数据流进行传输,对于大文件和网速慢的情况非常友好。但是Fetch不会对请求和响应进行监听,不能阻断请求;过于底层,对一些状态码没有封装,兼容性差。