只知道ajax?你已经out了

欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~javascript

本文由前端林子发表于云+社区专栏前端

随着前端技术的发展,请求服务器数据的方法早已不局限于ajax、jQuery的ajax方法。各类js库已如雨后春笋通常,蓬勃发展,本文主要想介绍其中的axios和fetch。vue

0.引入

ajax(Asynchronous JavaScript and XML--异步JavaScript 和 XML),是一种客户端向服务器请求数据的方式,而且不须要去刷新整个页面;它依赖的是XMLHttpRequest对象。在我以前的文章中,介绍过ajax的建立过程,能够移步此次,咱们聊聊ajax的建立过程java

固然项目中咱们通常没有直接使用原生的ajax,而是使用javascript的各类库,例如jQuery。jQuery对原生的XHR对象进行了封装,还增添了对JSONP的支持,且通过多年维护,各类文档资料很是丰富,很是适合学习和上手。不过随着前端技术的快速发展,react、vue框架的兴起,XHR对象都有了替代的方案(fetch)。另外若是为了要使用$.ajax方法,就导入整个jQuery这个大而全的库,也未免显得臃肿了些。因此本文将介绍两个目前经常使用的获取服务器数据的js库:axios和fetch。node

1.axios

是一个基于 Promise 的 HTTP 库,能够用在浏览器和 node.js 中。react

随着 vuejs 做者尤雨溪发布消息,再也不继续维护vue-resource,并推荐你们使用 axios 开始,axios 进入了不少人的目光。axios本质也是对原生的XHR的封装,不过它是Promise 的实现版本,符合最新的ES规范,axios的几条特性:ios

(1)从浏览器中建立XHR;git

(2)从node.js建立http请求;es6

(3)支持Promise API;github

(4)客户端支持防护CSRF

(5)提供了一些并发请求的接口

使用npm安装:

npm install axios

示例--执行GET请求:

//axios
axios.get('/user', {
    params: {
        ID: 12345
    }
}).then(function (response) {
    console.log(response);
}).catch(function (error) {
    console.log(error);
});

axios的优势:体积较小、使用简单、还能够执行多个并发请求,而且能够直接获得返回结果,不会像fetch须要本身去转换,我的仍是比较喜欢使用axios。

2.fetch

fetch API脱离了XHR,是基于Promise设计。旧浏览器不支持Promise,须要使用polyfill es6-promise。

2.1 使用

使用npm安装:

npm install whatwg-fetch --save

示例--执行GET请求:

//use 'whatwg-fetch'
import 'whatwg-fetch'

var result = fetch(url, {
    credentials: 'include',//跨域请求带上cookie 
    headers: { 'Accept': 'application/json, text/plain, */*' }//设置http请求的头部信息 
}).then(res => {
    return res.text() //将请求来的数据转化成 文本形式 
    // return res.json() //将数据转换成 json格式
}).then(text => {
    console.log(text)
}).catch(e => {
    throw (e)
})

能够在这个代码的基础上,增长一些操做,好比说在对请求数据处理前,先检查下返回结果的状态。对状态非200的结果,增长对应状态码的错误提示;在获得请求数据后,转换成须要的文本格式,或者json格式;另外,还能够对转换后的数据进行进一步的处理,好比请求的数据返回的是下划线类型的数据,能够处理成驼峰形式。

2.2 fetch的优势及须要注意的地方

为何要使用fetch呢?直接使用jQuery和axios也能知足咱们的开发须要。看了些文章,说起到使用fetch的好处:

  • 脱离的XHR,是ES规范里新的实现方式,支持async/await;
  • 更加底层,提供了丰富的API(request,response);
  • 符合关注分离,没有将输入、输出和用事件来跟踪的状态混杂在一个对象里;
  • 更好更方便的写法;

须要注意的是:

  • 兼容性;
  • 当服务器返回400、500等错误码时并不会reject,只有网络错误等致使请求不能完成时,fetch才会被reject;
  • fetch不支持abort,不支持超时控制,使用setTimeout及Promise.reject的实现的超时控制,并不能阻止请求过程继续在后台运行,形成了流量的浪费;
  • fetch没有办法原生监测请求的进度,而XHR能够;
  • fetch跨域请求时,默认不会带cookie,若是须要带cookie,则要指定:credentials:’include’,例如:
var result = fetch(url, {
    credentials: 'include',
});

3.小结

本文简单地分别介绍了axios和fetch的使用方法和特色。若是要详细了解fetch的应用,推荐阅读 MDN Fetch 教程WHATWG Fetch 规范。若有问题,欢迎指正。

相关阅读
【每日课程推荐】机器学习实战!快速入门在线广告业务及CTR相应知识

此文已由做者受权腾讯云+社区发布,更多原文请点击

搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!

海量技术实践经验,尽在云加社区

相关文章
相关标签/搜索