一文学会Axios的使用


异步请求

  • 同步发送请求过程如下
    未命名.png

    浏览器页面在发送请求给服务器,在服务器处理请求的过程中,浏览器页面不能做其他的操作。只能等到服务器响应结束后才能,浏览器页面才能继续做其他的操作。

  • 异步发送请求过程如下浏览器页面发送请求给服务器,在服务器处理请求的过程中,浏览器页面还可以做其他的操作。

异步.png

Ajax

我们先来看一下axios的基础版本ajax,这里大家了解即可!

//2. 发送ajax请求
//2.1. 创建核心对象
var xhttp;
if (window.XMLHttpRequest) {xhttp = new XMLHttpRequest();
} else {// code for IE6, IE5xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}//2.2. 发送请求
xhttp.open("GET", "http://localhost:8080/ajax-demo/selectUserServlet);xhttp.send();//2.3. 获取响应
xhttp.onreadystatechange = function() {if (this.readyState == 4 && this.status == 200) {//处理响应的结果}
};

可以看出,前端给后端发送请求,主要由三部分组成:

  1. 创建对象
  2. 调用方法,发送请求
  3. 调用方法,获取响应

Axios

其实,axios是由ajax封装得来的,他简化了ajax的重复工作,使我们工作更简单

入门案例

我们以get请求为例来来研究axios的使用
方法一:

this.$axios.get('http://localhost:8080/goods.json?id=1',{params: {id:1}}).then(res=>{console.log(res.data);},err=>{console.log(err);})

方法二:

this.$axios({method: 'get',url: 'http://localhost:8080/goods.json?id=1',params: {id:1}}).then(res=>{console.log(res.data);},err=>{console.log(err);})

可以看到,axios的请求依旧由 请求响应 来组成,而对象的创建这种重复不变的工作由axios来封装完成

在日常代码编写中,方式一更常用
这里我们其实可以优化,将 this.$ 来省略

axios.get('http://localhost:8080/goods.json?id=1',{params: {id:1}}).then(res=>{console.log(res.data);},err=>{console.log(err);})

这里的请求中,我们主要指定请求后端路径
这里的响应中,我们使用.then来访问,使用res=>{ }来获取响应的数据

相信到了这里,大家对axios的基础使用有了基本的了解,接下来,我们就好好研究一下我们的 请求响应 这两大板块

请求方式

axios可以请求的5种方法:

  1. get:获取数据,请求指定的信息,返回实体对象
  2. post:向指定资源提交数据(例如表单提交或文件上传)
  3. put:更新数据,从客户端向服务器传送的数据取代指定的文档的内容
  4. patch:更新数据,是对put方法的补充,用来对已知资源进行局部更新
  5. delete:请求服务器删除指定的数据
get

我们的入门案例中就使用的是get请求

axios.get('http://localhost:8080/goods.json?id=1',{params: {id:1}}).then(res=>{console.log(res.data);})

post

方法一:注意这里参数传递不写params

axios.post('/url',{id:1
}).then(res=>{console.log(res.data);
})


方法二:注意这里参数传递是data

axios({method: 'post',url: '/url',data: {id:1}
}).then(res=>{console.log(res.data);
})

form-data请求

let data = {//请求参数
}let formdata = new FormData();
for(let key in data){formdata.append(key,data[key]);
}axios.post('/goods.json',formdata).then(res=>{console.log(res.data);
})

put
axios.put('/url',{id:1
}).then(res=>{console.log(res.data);
})

patch请求
axios.patch('/url',{id:1
}).then(res=>{console.log(res.data);
})

delete

参数以明文形式提交

this.$axios.delete('/url',{params: {id:1}}).then(res=>{console.log(res.data);})

参数以封装对象的形式提交

axios.delete('/url',{data: {id:1}
}).then(res=>{console.log(res.data);
})axios({method: 'delete',url: '/url',params: { id:1 }, //以明文方式提交参数data: { id:1 } //以封装对象方式提交参数
}).then(res=>{console.log(res.data);
})

all 并发请求(了解)

并发请求:同时进行多个请求,并统一处理返回值

 this.$axios.all([this.$axios.get('/goods.json'),this.$axios.get('/classify.json')
]).then(this.$axios.spread((goodsRes,classifyRes)=>{console.log(goodsRes.data);console.log(classifyRes.data);})
)

响应

这里我们只要了解使用

  • res => {} 接受参数
  • err => {} 接受参数

async和await

参考帖子:async和await

async/await 出现的原因

Promise 的编程模型依然充斥着大量的 then 方法,虽然解决了回调地狱的问题,但是在语义方面依然存在缺陷,代码中充斥着大量的 then 函数,这就是 async/await 出现的原因。async/await 让代码更少,更简洁。

入门案例

这里我们还是以 get 请求为例

// vue2 格式
async sendReq() {const resp = await axios.get('http://localhost:8080/goods');
}// vue3格式
const sendReq = async () => {const resp = await axios.get('http://localhost:8080/goods');
}

写法说明:

  1. await 等待请求返回值,使用遍历接受返回值,我们使用响应值的时候可以直接使用resp这个接受变量来获取
  2. await等待谁呢?等待async修饰的异步函数,所以有await一定有async,并且作用在函数上

后续的深入原理教程我们下期再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/674584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript 跨窗口通信(Cross-Window Communication)

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 在现代 Web 开发中,跨窗口通信是一种常见需求。它允许在…

服务器和云计算之间有什么关系?

云计算与服务器之间的关系是密切而复杂的。首先,我们需要明确一点,云计算并不是一种全新的技术,而是对现有技术的一种整合和改进。在这个基础上,我们可以更好地理解云计算与服务器之间的关系。 服务器是云计算的重要组成部分之一…

如何在Linux上部署1Panel运维管理面板并实现无公网ip远程访问

文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、…

Python中使用opencv-python库进行颜色检测

Python中使用opencv-python库进行颜色检测 之前写过一篇VC中使用OpenCV进行颜色检测的博文,当然使用opencv-python库也可以实现。 在Python中使用opencv-python库进行颜色检测非常简单,首选读取一张彩色图像,并调用函数imgHSV cv2.cvtColor…

华为 Huawei 交换机 黑洞MAC地址的作用和配置示例

黑洞mac作用:某交换机上配置某个PC的mac地址为黑洞mac,那么这台PC发出来的包都会被交换机丢弃,不会被转发到网络中。 组网需求: 如 图 2-13 所示,交换机 Switch 收到一个非法用户的访问,非法用户的 MAC 地址…

C++新版本特性

目录: 前言 C11的常用新特性 auto类型推导: auto的限制: auto的应用: decltype类型推导: decltype的实际应用: 使用using 定义别名: 支持函数模板的默认模板参数 : tuple元组: 列表初…

每日OJ题_位运算①_位运算解题方法+3道OJ

目录 位运算算法原理 ①力扣191. 位1的个数 解析代码 ②力扣338. 比特位计数 解析代码 ③力扣461. 汉明距离 解析代码 位运算算法原理 常见位运算解题方法: 1. 基础位运算: &:按位与,有0就是0 | :按位或&a…

C++分支语句

个人主页:PingdiGuo_guo 收录专栏:C干货专栏 大家新年快乐,今天,我们来了解一下分支语句。 文章目录 1.什么是分支语句 1.if语句 基本形式 用法说明 练习 2.if-else语句 基本形式 用法说明 练习 3.switch语句 基本形式…

LeetCode 热题 100 | 链表(中下)

目录 1 19. 删除链表的倒数第 N 个节点 2 24. 两两交换链表中的节点 3 25. K 个一组翻转链表 4 138. 随机链表的复制 菜鸟做题第三周,语言是 C 1 19. 删除链表的倒数第 N 个节点 到底是节点还是结点。。。 解题思路: 设置双指针 left 和 ri…

云安全的基本概念(基本目标与指导方针)

目录 一、云安全概念概述 1.1 概述 二、云安全的基本目标 2.1 安全策略开发模型 2.1.1 信息安全三元组 2.1.1.1 保密性(Confidentiality) 2.1.1.2 完整性(Integrity) 2.1.1.3 可用性(Availability) 2.1.2 信息安全三元组的局限性 2.2 其他信息安全属性 2.2.1 真实性 …

Java基础知识练习题

1.对Java源文件进行编译操作的命令是(B) A.Java B.javac C.where is java D.javaw 2.下列命令中,用来运行Java程序的是(A)A.java B. javadoc C. jar D. javac 分析: 对Java源程序进行编译的命令是J…

踩坑实录(Third Day)

临近年关,同事们该回家的也都回家了,所以我对工作的欲望不是很强烈,所以就主要是自己学习了一下,在 B 站看看视频,自己敲代码,所以今天没遇到什么坑,但是可以分享一下之前踩到的两个坑。 此为第…

电商小程序04实现登录逻辑

目录 1 创建自定义方法2 获取用户名和密码3 验证用户是否同意协议4 验证用户名和密码总结 上一篇我们实现了登录功能的前端界面,这一篇实现一下登录的具体逻辑。 1 创建自定义方法 一般如果页面点击按钮需要有事件响应的,我们用自定义方法来实现。打开我…

第四篇:数据库安装(命令行)

数据库命令行界面安装 mysql官网,下载解压 https://dev.mysql.com/downloads/mysql/ 在安装之前先去检查一下,本地计算机的用户合组 winr(输入lusrmgr.msc) -点击组-双击administrator 如果只有这两个,那么就添加一下,提高网络服务的权限(避免出现mysql启动失败) …

MySQL之体系结构

华子目录 MySQL简介MySQL的特性MySQL版本MySQL常见版本 数据库排名网站MySQL结构体系查看最大连接数查询缓存配置情况 一条SQL语句执行流程 MySQL简介 MySQL是一个小型关系数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被sun公司10亿美金收购。2009年…

springboot项目启动报错:dynamic-datasource can not find primary datasource

项目启动报错信息 Caused by: com.baomidou.dynamic.datasource.exception.CannotFindDataSourceException: dynamic-datasource can not find primary datasourceat com.baomidou.dynamic.datasource.DynamicRoutingDataSource.determinePrimaryDataSource(DynamicRoutingDat…

编程实例分享,手表养护维修软件钟表维修开单管理系统教程

编程实例分享,手表养护维修软件钟表维修开单管理系统教程 一、前言 以下教程以 佳易王钟表维护维修管理系统软件V16.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 左侧为导航栏, 1、系统设置:可以设置打…

【深度学习】pytorch 与 PyG 安装(pip安装)

【深度学习】pytorch 与 PyG 安装(pip安装) 一、PyTorch安装和配置(一)、安装 CUDA(二)、安装torch、torchvision、torchaudio三个组件(1)下载镜像文件(2)创建…

【网络技术】【Kali Linux】Nmap嗅探(二)多设备扫描

上期实验博文:(一)简单扫描 一、实验环境 本次实验进行Nmap多设备扫描,实验使用 Kali Linux 虚拟机(扫描端)、Ubuntu 22.04虚拟机(被扫描端1)、Ubuntu 18.04虚拟机(被扫…

【力扣】快乐数,哈希集合 + 快慢指针 + 数学

快乐数原题地址 方法一:哈希集合 定义函数 getNext(n) ,返回 n 的所有位的平方和。一直执行 ngetNext(n) ,最终只有 2 种可能: n 停留在 1 。无限循环且不为 1 。 证明:情况 1 是存在的,如力扣的示例一…