golang ajax jquery,只知道ajax?你已经out了

**欢迎大家前往[腾讯云+社区](https://cloud.tencent.com/developer/?fromSource=waitui),获取更多腾讯海量技术实践干货哦~**

> 本文由[前端林子](https://cloud.tencent.com/developer/user/2221081)发表于[云+社区专栏](https://cloud.tencent.com/developer/column/5154?fromSource=waitui)

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

# 0.引入

ajax(Asynchronous JavaScript and XML--异步JavaScript 和 XML),是一种客户端向服务器请求数据的方式,并且不需要去刷新整个页面;它依赖的是XMLHttpRequest对象。在我之前的文章中,介绍过ajax的创建过程,可以移步[这次,我们聊聊ajax的创建过程](https://cloud.tencent.com/developer/article/1193413)。

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

# 1.axios

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

随着 vuejs 作者尤雨溪发布消息,不再继续维护vue-resource,并推荐大家使用 axios 开始,axios 进入了很多人的目光。axios本质也是对原生的XHR的封装,不过它是Promise 的实现版本,符合最新的ES规范,[axios](https://github.com/axios/axios)的几条特性:

(1)从浏览器中创建XHR;

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

(3)支持Promise API;

(4)客户端支持防御CSRF

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

使用npm安装:

```js

npm install axios

```

示例--执行GET请求:

```js

//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安装:

```js

npm install whatwg-fetch --save

```

示例--执行GET请求:

```js

//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’,例如:

```js

var result = fetch(url, {

credentials: 'include',

});

```

# 3.小结

本文简单地分别介绍了axios和fetch的使用方法和特点。如果要详细了解fetch的应用,推荐阅读 [MDN Fetch 教程](https://developer.mozilla.org/zh-CN/docs/Web/API/GlobalFetch/fetch)和[WHATWG Fetch 规范](https://fetch.spec.whatwg.org/)。如有问题,欢迎指正。

>**相关阅读**

>[【每日课程推荐】机器学习实战!快速入门在线广告业务及CTR相应知识](https://cloud.tencent.com/developer/edu/course-1128?fromSource=waitui)

**此文已由作者授权腾讯云+社区发布,更多原文请[点击](https://cloud.tencent.com/developer/article/1363636?fromSource=waitui )**

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

海量技术实践经验,尽在[云加社区](https://cloud.tencent.com/developer?fromSource=waitui)!

有疑问加站长微信联系(非本文作者)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值