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

ops/2025/3/30 6:59:58/

目录

  • 自封装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/ops/169780.html

相关文章

C#中迭代器和IEnumerator 接口和IEnumerable 接口的区别和作用

在C#里&#xff0c;迭代器、IEnumerator 接口以及 IEnumerable 接口都和集合遍历相关&#xff0c;不过它们的作用和使用场景存在差异。下面为你详细介绍&#xff1a; 1. IEnumerable 接口 作用&#xff1a;IEnumerable 接口用于表明一个类或结构可以被迭代。实现了 IEnumerab…

Milvus vs. ElasticSearch:向量库检索性能测试

目录 1. 构建检索库2. 测试条件3. 测试结果4. 性能分析5. 结论 1. 构建检索库 构建通用场景库总计约2万张。构建车辆数据库总计约12万张。构建公共数据库&#xff0c;包括Flickr30k、COCO、nlvr2、vqa等数据集约43万张。 2. 测试条件 环境说明&#xff1a;分别单机部署Milvu…

java+selenium(资源全备,打开已使用浏览器信息,保留用户信息)

javaselenium(资源全备&#xff0c;打开已使用浏览器信息&#xff0c;保留用户信息) 一、介绍 我的代码可以实现以下效果&#xff1a; 保留用户信息&#xff0c;好处&#xff1a;可以在登录好一个账号后还保留原来的token验证信息 使用javaselenium实现爬取vue元素内容&…

C# 中实现一个线程持续读取,另一个线程负责写入,且写入时读取线程暂停

实现思路 暂停信号&#xff1a;通过 ManualResetEventSlim 通知读取线程暂停。 暂停确认&#xff1a;读取线程收到暂停信号后&#xff0c;发送确认信号。 原子性控制&#xff1a;确保写入操作执行期间&#xff0c;读取线程处于完全暂停状态。 恢复机制&#xff1a;写入完成后…

html5炫酷3D立体文字效果实现详解

炫酷3D立体文字效果实现详解 这里写目录标题 炫酷3D立体文字效果实现详解项目概述技术实现要点1. 基础布局设置2. 动态背景效果3. 文字渐变效果4. 立体阴影效果5. 悬浮动画效果 技术难点及解决方案1. 文字渐变动画2. 立体阴影效果3. 性能优化 浏览器兼容性总结 项目概述 在这个…

天地图InfoWindow插入React自定义组件

截至2025年03月21日天地图的Marker不支持添加Label; 同时Label和Icon是不支持自定义HTMLElement只支持String&#xff1b;目前只有InfoWindow支持自定义HTMLElement; 效果图 React核心api import ReactDOM from react-dom/client const content document.createElement(div);…

前端 Babel 入门简介

前端 Babel 简介 Babel 是一个 JavaScript 编译器&#xff0c;主要用于将 ES6 代码转换为向后兼容的 JavaScript 代码&#xff0c;以便可以在旧版本的浏览器或环境中运行。以下从多个方面对前端 Babel 进行详细介绍。 核心概念 语法转换&#xff1a;Babel 可以把新的 JavaS…

【考研政治】2026考研政治马原部分关键词带背 导论

&#x1f4da;【考研哲学深度精讲】考点解析&#xff5c;马原框架案例真题时政&#xff5c;2025考研旗舰版&#xff08;上篇&#xff09; &#x1f31f; 前言&#xff1a;哲学备考的「三重境界」 ▶ 第一重&#xff1a;概念通关&#xff08;8月前&#xff09;——掌握217个核…