这三个其实都是用来请求数据的,那他们的区别在哪里呢?其实 axios
和 ajax
都是对XMLHttpRequest这个对象的封装;而fetch则是window下的一个方法,是一个更底层的方法。
ajax
其实重点就是首先实例一个XMLHttpRequest对象,用其中的open
方法建立连接;send
方法传输数据(前端传到后台);然后再利用onreadystatechange
监听readyState的变化,当其为4
时,代表请求完成;简单的代码实现如下:
1 | const Ajax={ |
axios
axios其实就是在ajax的基础上加了promise,具体如下:
1 | const myAxios = { |
fetch
fetch
的使用这里就不多做赘述,有很多这方面的文档。fetch
首先不想ajax一样需要引入jq
;如果想自己实现ajax呢,步骤相对于fetch
来说也是相当的繁琐;同时fetch
也加入了promise
,解决了回调地狱的问题;使用fetch虽然简单,但是也有一些问题需要注意:
- cookie传递
必须在header参数里面加上credientials: ‘include’,才会如xhr一样将当前cookies带到请求中去 - fetch和xhr的不同
fetch虽然底层,但是还是缺少一些常用xhr有的方法,比如能够取消请求(abort)方法
fetch在服务器返回4xx、5xx时是不会抛出错误的,这里需要手动通过,通过response中的ok字段和status字段来判断