学习记录-Ajax-自封装axios函数

server/2025/3/29 23:15:02/

目录

  • 自封装axios函数
  • 封装axios函数实现步骤
      • 1. 准备阶段
      • 2. 实现无参get请求
      • 3.实现有参get请求
      • 4. 实现post请求
  • 完整实例代码

自封装axios函数

封装axios函数实现步骤

1. 准备阶段

理解axios函数的底层原理,包括Promise,XMLHttpRequest等概念

  1. XMLHttpRequest工作过程
    先创建一个XMLHttpRequest实例对象,设置请求方式和url地址,绑定loadend事件,响应.reponse,最后在发送数据。如果请求方式为get,则需要将查询参数写在url网址后,如果请求方式为post,则寻要在发送请求前设置相应头
  2. promise工作
    先创建一个promise实例对象,里面传递resolve,reject两个参数。resolve代表请求成功,调用then;reject代表请求失败,调用catch

自行准备接口

2. 实现无参get请求

利用promise的.then方法,封装axios函数,返回一个promise实例对象,赋予函数.then方法

  1. 如果method为空,则默认为get方法
  2. 判断ajax.status的值,如果访问成功,则用resolve传response,如果访问失败,则用reject抛错误
	function myAxios(obj) {return new Promise((resolve, reject) => {				//确保自定义axios函数可以调用.then和.catch方法const ajax = new XMLHttpRequest()ajax.open(obj.method || 'get', obj.url)				//如果method为空,则为get方法ajax.addEventListener('loadend', (e) => {if(ajax.status>=200&&ajax.status<300){			//判断相应是否成功resolve(ajax.response)}else{reject(new Error(ajax.response))}         })ajax.send()})}

3.实现有参get请求

在配置请求方法前,对params进行判断,如果存在params,则将其转换为查询字符串,并且拼接到url网址后

    	const a = obj.params ? '?'+new URLSearchParams(obj.params) : ''			//转换查询参数ajax.open(obj.method || 'get', `${obj.url}${a}`)						//查询参数拼接

4. 实现post请求

在数据发送前判断data是否存在,如果存在则先设置相应头,在将data数据以JSON字符串的形式发送出去

	if(obj.data){ajax.setRequestHeader('Content-Type', 'application/json')ajax.send(JSON.stringify(obj.data))				//发送的数据为JSON字符串形式}else{ajax.send()}

完整实例代码

<!DOCTYPE html>
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>封装_简易axios函数_获取省份列表</title>
</head><body><script>function myAxios(obj) {return new Promise((resolve, reject) => {const ajax = new XMLHttpRequest()const a = obj.params ? '?' + new URLSearchParams(obj.params) : ''ajax.open(obj.method || 'get', `${obj.url}${a}`)ajax.addEventListener('loadend', (e) => {if (ajax.status >= 200 && ajax.status < 300) {resolve(ajax.response)} else {reject(new Error(ajax.response))}})if (obj.data) {ajax.setRequestHeader('Content-Type', 'application/json')ajax.send(JSON.stringify(obj.data))}else {ajax.send()}})}myAxios({url: 'http://hmajax.itheima.net/api/register',data: {username: 'baiyuansong',password: '1234567'},method: 'post'}).then(res => {console.dir(res)})</script>
</body></html>

http://www.ppmy.cn/server/177149.html

相关文章

失败的面试经历(ʘ̥∧ʘ̥)

一.面向对象的三大特性 1.封装&#xff1a;将对象内部的属性私有化&#xff0c;外部对象不能够直接访问&#xff0c;但是可以提供一些可以使外部对象操作内部属性的方法。 2.继承&#xff1a;类与类之间会有一些相似之处&#xff0c;但也会有一些异处&#xff0c;使得他们与众…

vscode/cursor中python运行路径设置 模块导入问题

vscode/cursor中python运行路径设置 ## 文件路径设置 问题描述 pycharm的项目用cursor运行&#xff0c;出现目录找不到 后来利用 os.getcwd()&#xff0c;经过打印调试发现是IDE的本身配置问题 pycharm中&#xff0c;os.getcwd()默认打开当前脚本所在目录 vscode/cursor中…

基于javaSpringboot+mybatis+layui的装修验收管理系统设计和实现

基于javaSpringbootmybatislayui的装修验收管理系统设计和实现 &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种…

Docker 部署医学影像 DICOM 服务器 Orthanc

Orthanc 是一个轻量级的&#xff0c;基于 REST 的 DICOM 服务器&#xff0c;主要用于卫生保健和医疗研究。Orthanc 可将任意运行了 Windows 和 Linux 的计算机变成 DICOM 存储&#xff08;或者说是一个小的 PACS 系统&#xff09;&#xff0c;其架构是轻量级的&#xff0c;没有…

curl库+openssl库windows编译

一、工具准备 Visual Studio 2008&#xff1a;确保安装了 C 开发工具。 Git&#xff1a;用于克隆 cURL 的源码。 Perl&#xff1a;可以从 ActiveState Perl 下载并安装。 NASM&#xff08;可选&#xff09;&#xff1a;如果需要汇编优化&#xff0c;可以从NASM 官方网站 下载并…

【Linux网络-NAT、代理服务、内网穿透】

一、NAT技术 1.NAT技术背景 之前我们讨论了&#xff0c;IPV4协议中&#xff0c;IP地址数量不充足的问题 NAT技术当前解决IP地址不够用的主要手段&#xff0c;是路由器的一个重要功能 NAT&#xff08;网络地址转换&#xff0c;Network Address Translation&#xff09;是一种…

分布式中间件:RabbitMQ确认消费机制

分布式中间件&#xff1a;RabbitMQ确认消费机制 在分布式系统中&#xff0c;消息队列是实现异步通信和系统解耦的重要组件。RabbitMQ 作为一款功能强大的消息队列中间件&#xff0c;提供了丰富的特性来保证消息的可靠传输和消费。其中&#xff0c;确认消费机制是确保消息被正确…

Pytorch torch.roll函数介绍

torch.roll 是 PyTorch 中的一个函数&#xff0c;用于对输入张量的元素进行循环滚动操作。它可以将张量的元素在指定的维度上移动&#xff0c;超出边界的元素会循环回到另一侧。以下是关于 torch.roll 函数的详细介绍&#xff1a; 函数语法 torch.roll(input, shifts, dimsNo…