Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >只知道ajax?你已经out了

只知道ajax?你已经out了

原创
作者头像
前端林子
发布于 2018-11-17 06:00:35
发布于 2018-11-17 06:00:35
3.7K40
代码可运行
举报
文章被收录于专栏:前端技术总结前端技术总结
运行总次数:0
代码可运行

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

0.引入

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

当然项目中我们一般没有直接使用原生的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的几条特性:

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

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

(3)支持Promise API

(4)客户端支持防御CSRF

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

使用npm安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 npm install axios

示例--执行GET请求:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//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安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install whatwg-fetch --save

示例--执行GET请求:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//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’,例如:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var result = fetch(url, {
    credentials: 'include',
});

3.小结

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
4 条评论
热度
最新
不过ajax还是最初级的方法,非常适合新手,当用熟练后可以逐渐尝试其他的命令。
不过ajax还是最初级的方法,非常适合新手,当用熟练后可以逐渐尝试其他的命令。
回复回复点赞举报
这个人写的技术文章不错,很干货 https://www.toutiao.com/i6627023354299679236/
这个人写的技术文章不错,很干货 https://www.toutiao.com/i6627023354299679236/
回复回复点赞举报
没怎么用过,不过写的不错,有机会可以去试试
没怎么用过,不过写的不错,有机会可以去试试
回复回复点赞举报
? ? ?
? ? ?
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
ajax和fetch、axios的优缺点以及比较
前端是个发展迅速的领域,前端请求自然也发展迅速,从原生的XHR到jquery ajax,再到现在的axios和fetch。
前端迷
2018/10/29
9.5K0
前后端数据交互(六)——ajax 、fetch 和 axios 优缺点及比较
ajax是最早出现发送后端请求的技术,属于原生 js 。ajax使用源码,请点击《原生 ajax 请求详解》查看。一般使用之前,我们都需要把它们封装使用,就以 jQuery 的 ajax 为例。
呆呆
2021/10/01
3.1K0
Ajax笔记(2) -Axios
xhr.onreadystatechange = function() { 当事件发生时执行的代码 }
y191024
2022/09/20
1.5K0
Ajax笔记(2) -Axios
axios、XHR、XML、AJAX和Fetch分不清怎么办?
axios 是一个轻量的HTTP客户端,它基于 XMLHttpRequest 服务(浏览器)来执行 HTTP 请求,支持丰富的配置,支持 Promise,支持浏览器端和 Node.js 端。在服务器端它使用本机 node.js http模块,而在客户端(浏览器)它使用 XMLHttpRequests。
泯泷、
2024/03/11
2810
ajax和axios、fetch的区别
传统 Ajax 指的是 XMLHttpRequest(XHR), 最早出现的发送后端请求技术,隶属于原始js中,核心使用XMLHttpRequest对象,多个请求之间如果有先后关系的话,就会出现回调地狱。 JQuery ajax 是对原生XHR的封装,除此以外还增添了对JSONP的支持。经过多年的更新维护,真的已经是非常的方便了,优点无需多言;如果是硬要举出几个缺点,那可能只有:
smy
2019/04/09
1.6K0
ajax和axios、fetch的区别
ajax、axios、fetch三者之间
符合关注分离,没有将输入、输出和用事件来跟踪的状态混杂在一个对象里 更好更方便的写法 更加底层,提供的API丰富(request, response) 脱离了XHR,是ES规范里新的实现方式 1)fetchtch只对网络请求报错,对400,500都当做成功的请求,需要封装去处理 2)fetch默认不会带cookie,需要添加配置项 3)fetch不支持abort,不支持超时控制,使用setTimeout及Promise.reject的实现的超时控制并不能阻止请求过程继续在后台运行,造成了量的浪费 4)fetch没有办法原生监测请求的进度,而XHR可以
乐心湖
2020/07/31
4210
总结Vue3 的一些知识点:Vue3 Ajax(axios)
Axios 是一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 中。
爱学iOS的小麦子
2023/05/26
2K0
嗯,还在用Ajax嘛? Fetch了解一下呀!
「此刻你在沙漠里,因此你要潜心于沙漠之中。沙漠和世上其他东西一样,可以用来理解世界。你甚至不必理解沙漠,只要观察普通的沙粒就行,从中你可以看到天地万物的神奇之处。--------《牧羊少年的人生之旅》」
山河已无恙
2023/03/02
5.1K0
嗯,还在用Ajax嘛? Fetch了解一下呀!
Axios基本使用
Axios Axios 是一个基于promise的HTTP库,可以用在浏览器和node.js中。
ZEHAN
2020/10/29
2K0
Ajax请求携带Cookie
先来了解下xhr xhr,全称为XMLHttpRequest,用于与服务器交互数据,是ajax功能实现所依赖的对象,jquery中的ajax就是对 xhr的封装。 还有axios和fetch请求都属于xhr请求,都是基于标准 Promise 实现。
陈灬大灬海
2020/09/10
3.3K0
Ajax请求携带Cookie
Ajax教程_ajax是服务器端动态网页技术
Ajax是一种异步请求数据的web开发技术,目前主要用于异步,大家都知道,浏览器主线程是单线程的,也就是一次只能干一件事,以Ajax就是让浏览器当主线程完成后去干别的事情,比如发送请求,加载接口数据等等.这个技术通过XMLHttpRequest对象实现,具体的机制大家可以参考浏览器的时间环机制.
全栈程序员站长
2022/09/20
1.5K0
科普系列——如何解释什么是 AJAX?
学妹这学期新开了一门课《Script及AJAX开发技术》,然而临近学期末,她突然跑来问我:到底什么是AJAX ?相信很多人(尤其是前端)在写代码的时候经常会用到AJAX技术,但是如果真要说出个所以然,可能还会有些困难。其实简单概括下,AJAX就是一种利用 JavaScript 向服务端发起请求,并获得服务端响应的技术。它的特点是异步请求,局部刷新。
出其东门
2019/08/01
9750
科普系列——如何解释什么是 AJAX?
vue-d2admin-axios异步请求登录,先对比一下Jquery ajax, Axios, Fetch区别
前端技术真是一个发展飞快的领域,我三年前入职的时候只有原生XHR和Jquery ajax,我们还曾被JQuery 1.9版本版本以下不支持大文件请求这个问题卡了半天(最后自己写了原生的XHR请求)。一晃眼,JQuery ajax早已不能专美于前,axios和fetch都已经开始分别抢占“请求”这个前端高地。本文将会尝试着阐述他们之间的区别,并给出自己的一些理解。
landv
2019/07/01
2.7K0
vue-d2admin-axios异步请求登录,先对比一下Jquery ajax, Axios, Fetch区别
Vue3 Ajax(axios)(上)
Axios 是一个基于 Promise 的 HTTP 库,可以用在浏览器和 node.js 中。
陈不成i
2021/07/28
2.1K0
React基础(9)-React中发送Ajax请求以及Mock数据
把这段商品列表的json代码命名为goodlist.json,放到根目录public的api文件夹内
itclanCoder
2020/10/16
2.4K0
都0202年了,你还不会前后端交互吗
为了方便我采用 Python Flask 编写 API,如果有其他 api 服务搭建的同学,可以移步:四种方式搭建 API,总有一款适合你
Gorit
2021/12/08
1.9K0
都0202年了,你还不会前后端交互吗
vite构建的本地开发环境请求第三方接口时如何解决跨域问题
本地开发环境,只要请求接口,如果没有做代理配置,都会存在同源策略,跨域的问题,要么在本地做代理,要么在服务器做代理,要么在请求头中设置允许跨域,下面我们来介绍下如何解决vite构建的本地开发环境请求第三方接口时如何解决跨域问题
itclanCoder
2023/09/21
2K0
vite构建的本地开发环境请求第三方接口时如何解决跨域问题
对于 fetch 和 axios 和 Ajax 区别 ?
Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。
青梅煮码
2023/01/16
9500
前端 fetch 通信
作者:villainthr 随着前端异步的发展, XHR 这种耦合方式的书写不利于前端异步的 Promise 回调。而且,写起来也是很复杂.。fetch API 本来是在 SW(ServiceWork
腾讯IVWEB团队
2017/04/27
2.9K0
JavaScript进阶 - AJAX请求与Fetch API
在现代Web开发中,数据的动态加载和与服务器交互是至关重要的。传统的JavaScript通过XMLHttpRequest对象实现这一功能,但这种方法往往显得繁琐且不易于理解。随着技术的发展,Fetch API应运而生,提供了一种更简洁、更现代的方式来处理AJAX请求。本文将深入浅出地介绍AJAX请求与Fetch API的使用,包括常见问题、易错点以及如何避免它们。
Jimaks
2024/07/09
3750
相关推荐
ajax和fetch、axios的优缺点以及比较
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验