实现简易的 axios

1、实现逻辑

Promise + XMLHttpRequest 封装

① 返回一个 promise 实例

new XMLHttpRequest 并设置默认请求方式、请求根路径;

添加请求+响应事件;

根据状态码,对应执行成功或者失败的调用函数,并把结果传进去;

② 处理 params

如果有 params,就 new URLSearchParams() 对象,并把传进来的 params 传到对象里;

再用 toString 方法转成 URL 编码字符串,最后再拼接 url 来覆盖 url 默认值

③ 处理 data

如果有 data,就 xhr.setRequestHeader 设置请求头的请求数据类型;

比如 JSON 字符串,就还需要用 JSON.stringify 转成 JSON 字符串

最后传到 send 携带 JSON 字符串发起请求

2、封装代码

  // 实现简易的axios   function myAxios(config) {return new Promise((resolve, reject) => {// 实例化xhrconst xhr = new XMLHttpRequest()// 默认get请求let { methods = "get", url, params = "", headers = "", data = "" } = config// 将传入的params对象转成URL编码字符串if (params) {const parseParams = new URLSearchParams(params)url += `?${parseParams.toString()}`}// 设置请求方法+请求地址xhr.open(methods, url)// 设置请求头if (headers) {Object.keys(headers).forEach((key) => {xhr.setRequestHeader(key, headers[key])})} else {xhr.setRequestHeader("Content-Type", "application/json")}// 添加请求响应事件xhr.addEventListener("loadend", () => {if (xhr.status >= 200 && xhr.status < 300) {// 成功resolve(JSON.parse(xhr.response))} else {reject(new Error(xhr.response))}})// data对象if (data) {// 设置请求头,请求数据类型设置为 JSON 字符串xhr.setRequestHeader("Content-Type", "application/json") // 转 JSON 字符串// 构造参数const jsonDate = JSON.stringify(data)// 发起请求xhr.send(jsonDate)} else {// 发起请求xhr.send()}})}

3、使用

  // 使用myAxios({methods: "get",url: "/1.json",headers: {"token": "123"},params: {name: "strawberry",age: 18,},// data: {//   name: "strawberry",//   age: 18,// },}).then((res) => {console.log("成功", res);}).catch((err) => {console.log("失败", err);});

 

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

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

相关文章

场内基金的折溢价

场内基金会出现折溢价&#xff0c;主要原因是场内基金有申购赎回&#xff0c;买入卖出这两套操作。 交易价格<基金净值&#xff0c;就是折价 交易价格>基金净值&#xff0c;就是溢价 如何判断场内基金的折溢价 ETF最好判断&#xff0c;有实时净值IOPV&#xff0c;交易价…

AOP切入点表达式基本格式

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 官方地址 https://docs.spring.io/spring-framework/reference/core/aop/ataspectj/pointcuts.html AOP切入点表达式基本格式如下&#xff1a; execution(modifiers-patte…

java针对:Sharing is only supported问题解决

#错误解决 当你运行出现报错&#xff1a;Java HotSpot™ 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended 问题翻译&#xff1a;Java HotSpot™ 64 位服务器 VM 警告&#xff1a;仅引导加载程序类…

OneDiff加速“图生生”,解锁电商AI图像处理新范式

2024年&#xff0c;电商领域正目睹生成式AI软件工具的飞速发展&#xff0c;AI Generated Content (AIGC) 技术在电商应用中的普及率正在显著提升&#xff0c;这类技术能够显著提高商业运营的效率&#xff0c;并促进业绩的稳步增长。 硅基流动研发的图片/视频生成推理引擎OneDif…

Linux:Jenkins:参数化版本回滚(6)

上几章我讲到了自动集成和部署 Linux&#xff1a;Jenkins全自动持续集成持续部署&#xff08;4&#xff09;-CSDN博客https://blog.csdn.net/w14768855/article/details/136977106 当我们觉得这个页面不行的时候&#xff0c;需要进行版本回滚&#xff0c;回滚方法我这里准备了…

电脑病毒详解(有bat版本 附代码)

众所周知&#xff0c;电脑病毒是所有用电脑的人最怕的东西。 它们是一种恶意软件&#xff0c;旨在破坏、感染或干扰计算机系统的正常运行。它们通过潜入计算机系统并在后台执行恶意代码来实现其目的。病毒可以通过互联网、可移动媒介&#xff08;如USB驱动器&#xff09;或下载…

Java基础知识总结(26)

MyBatis MyBatis框架解决的问题&#xff1a; 减轻使用JDBC的复杂性&#xff0c;不用编写重复的常见connection,Statement;不用编写关闭资源代码。直接使用java对象&#xff0c;表示结果数据。让开发者专注SQL的处理。其他分心的工作由MyBatis代劳。 三层架构 UI:&#xff0…

如何更好地收集软件需求并快速转换成软件功能

摘要 在软件开发过程中&#xff0c;需求收集与转换是确保项目成功的关键环节。本文详细探讨了如何更有效地收集软件需求&#xff0c;并迅速将这些需求转化为实际的软件功能&#xff0c;涉及的方法包括深入的用户研究、原型设计、敏捷开发方法以及持续的反馈循环。 关键词&…

【华为OD机试】机器人搬砖【C卷|100分】

题目描述 机器人搬砖,一共有N堆砖存放在N个不同的仓库中,第i堆砖中有bricks[i]块砖头, 要求在8小时内搬完。机器人每小时能搬砖的数量取决于有多少能量格, 机器人一个小时中只能在一个仓库中搬砖,机器人的能量格每小时补充一次且能量格只在这一个小时有效,为使得机器人损…

Hello算法2:复杂度分析

Hello算法2&#xff1a;复杂度分析 本文是基于k神的Hello 算法的读书笔记&#xff0c;请支持实体书。 https://www.hello-algo.com/chapter_paperbook/ 算法效率 算法效率评估 设计算法时&#xff0c;我们追求以下两个目标&#xff1a; 找出解法找出最优解 最优解通常包含…

Java 8中的Stream API及其用途详解

Java 8中的Stream API是Java函数式编程的一个核心组成部分&#xff0c;它允许你以声明性方式处理数据集合&#xff08;如列表、集合等&#xff09;。通过使用Stream API&#xff0c;你可以更方便地执行复杂的操作&#xff0c;如过滤、映射、排序和聚合&#xff0c;而无需编写大…

部署实施案例分析题

习题一 随着医院信息化程度的不断提高&#xff0c;各业务系统的全面上线&#xff0c;对IT基础架构的安全性、稳定性以及业务系统的连续性提出了较高的要求&#xff0c;运维工作也相同面临了前所未有的挑战。 为加强该医院的运维工作的规范化&#xff0c;并提高日常运维的工作…

实验7 内置对象response

编写代码&#xff0c;掌握request、response的用法。【参考课本4.6.2】 三、源代码以及执行结果截图&#xff1a; input.jsp <% page language"java" contentType"text/html; charsetutf-8" pageEncoding"utf-8"%> <!DOCTYPE html>…

LeetCode刷题笔记之动态规划(三)

一、子序列/子数组问题 子序列&#xff1a;按原数组的顺序排列&#xff0c;不一定是原数组中的相邻元素组成的。即子序列可以是不连续的。 子数组&#xff1a;原数组中连续的几个元素组成的数组。 1. 300【最长递增子序列】 题目&#xff1a; 给你一个整数数组 nums &#xff…

Redis面试题-缓存穿透,缓存击穿,缓存雪崩

1、穿透: 两边都不存在&#xff08;皇帝的新装&#xff09; &#xff08;黑名单&#xff09; &#xff08;布隆过滤器&#xff09; 解释&#xff1a;请求的数据既不在Redis中也不在数据库中&#xff0c;这时我们创建一个黑名单来存储该数据&#xff0c;下次再有类似的请求进来…

Q-Day提前?IBM警告:「量子+AI」将触发巨大风险!

Q-Day&#xff0c;即量子计算机强大到足以破解当前加密方案的时刻&#xff0c;原本被视为一个从近期到长期可能面临的挑战&#xff0c;而非刻不容缓的现实问题。然而&#xff0c;最新的研究发现似乎加速了这一天的到来。 IBM的研究团队在一篇论文中提出&#xff0c;混合量子经典…

测试学习1

学习目标 熟悉测试流程和规范&#xff0c;熟练掌握软件测试方法至少熟悉功能测试.性能测试.安全测试中的一种;熟练使用常用的测试工具&#xff0c;熟悉缺陷管理跟踪软件(禅道.Jira.QC等)&#xff0c;熟悉持续集成工具Jenkin;熟悉Linux操作系统&#xff0c;熟悉TCP/HTTPS等网络…

Redis入门到实战-第二十二弹

Redis实战热身Sentinel篇 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是一个开源的&#xff08;采用BSD许可证&#xff09;&#xff0c;用作数据库、缓存、消息代理和流处理引擎的内存…

利用出海、Socks5代理与代理IP

在当今数字化时代&#xff0c;跨界电商已成为企业扩展业务、拓展市场的重要策略。然而&#xff0c;这种扩展并非没有风险。网络安全问题一直是跨界电商必须面对的挑战之一。为了确保数据安全、保护用户隐私&#xff0c;以及有效应对地区限制&#xff0c;出海、Socks5代理与代理…

谷歌DeepMind推出SIMA智能体,可以跟人一起玩游戏

谷歌 DeepMind 推出了 SIMA&#xff0c;这是一种通过训练学习游戏技能的人工智能代理&#xff0c;因此它玩起来更像人类&#xff0c;而不是一个只做自己事情的强大人工智能。 从早期与 Atari 游戏合作&#xff0c;到以人类大师级别玩《星际争霸 II》的 AlphaStar 系统&#xf…