前言
随着前端技术的发展,请求服务器数据的方法早已经不局限于ajax,jquery的ajax方法了。各种js库已经如雨后春笋一般,蓬勃发展,本文主要介绍axios和fetch。
ajax
ajax(Asynchronous JavaScript and XML--异步JavaScript 和 XML
),是一种客户端向服务器请求数据的方式,并且不需要去刷新整个页面;它依赖的是XMLHttpRequest对象。当然一般项目中我们不是直接使用原生的ajax,而是使用各种库,例如Jquery。不过随着前端技术的发展,XHR也有了替代的方案(fetch)。
axios
是基于Promise的HTTP库,可以用在浏览器和nodejs中。
随着vuejs作者尤雨溪发布消息,不再维护vue-resource,并推荐大家使用axios开始,axios就进入了很多人的目光。axios本质也是对原生的XHR的封装,不过它是Promise的实现版本,符合新的ES规范,axios的几条特征:1
2
3
4
51. 从浏览器创建XHR
2. 从nodejs创建http请求
3. 支持Promise API
4. 客户端支持防御CSRF
5. 提供了一些并发请求的接口
使用npm安装:
1 | npm install axios |
示例–执行GET请求:
1 | // axios |
axios的优点
体积较小、使用简单、还可以执行多个并发请求,并且可以直接得到返回结果,不会像fetch一样需要自己去转换。
fetch
fetch API
脱离了XHR,是基于Promise设计。旧浏览器不支持Promise,需要使用polyfill es6-promise
。
使用npm安装:
1 | npm install whatwg-fetch --save |
示例–执行GET请求:
1 | // use 'whatwg-fetch' |
可以在这个代码的基础上,继续添加一些操作,例如请求前数据检查等,非常的方便。
fetch的优点以及需要注意的地方
fetch优点有如下几条:1
2
3
41. 脱离XHR,是ES规范里新的实现方式,支持async/await。
2. 更加底层,提供了丰富的API(request, response)。
3. 符合关注分离,没有将输入、输出和用事件来跟踪的状态混杂在一个对象里。
4. 更好更方便的写法。
使用fetch需要注意的是:1
2
3
4
5
6
71. 兼容性
2. 当服务器返回400、500等错误时并不会reject,
只有网络错误等原因导致请求不能完成时,才会执行reject
3. fetch不支持abort,不支持超时控制,使用setTimeout及Promise.reject实现的
超时控制,并不能阻止请求过程在后台进行,造成了流量的浪费。
4. fetch没有办法原生监测请求的进度,而XHR可以
5. fetch跨域请求时,默认不带cookie,需要自己指定credentials:’include’
小结
详细资料请访问MDN和WHATWG。