简易版axios实现-基于promise+XMLHttpRequest

javascript 复制代码
    /**
     * 目标:封装_简易axios函数_获取省份列表
     *  1. 定义myAxios函数,接收配置对象,返回Promise对象
     *  2. 发起XHR请求,默认请求方法为GET
     *  3. 调用成功/失败的处理程序
     *  4. 使用myAxios函数,获取省份列表展示
    */
    function myAxios(config) {
      return new Promise((resolve, reject) => {
        const xhr = new XMLHttpRequest()
        // 查询参数支持
        if (config.params) {
          config.url += `?${new URLSearchParams(config.params).toString()}`
        }
        xhr.open(config.method || "GET", config.url)
        xhr.addEventListener("loadend", () => {
          if (xhr.status >= 200 && xhr.status < 300) {
            resolve(JSON.parse(xhr.response))
          } else {
            reject(new Error(xhr.response))
          }
        })
        // 请求体参数支持
        if (config.data) {
          xhr.setRequestHeader("Content-Type", "application/json")
          xhr.send(JSON.stringify(config.data))
        } else {
          xhr.send()
        }
      })
    }

    myAxios({
      url: "https://ajax.itheima.net/api/register",
      method: "post",
      data: {
        username: "mayanan04",
        password: "123456"
      }
    }).then(ret => {
      document.querySelector("p").innerHTML = ret.message
    }).catch(err => {
      document.querySelector("p").innerHTML = err.message
    })
相关推荐
jingling5551 小时前
vue | 在 Vue 3 项目中集成高德地图(AMap)
前端·javascript·vue.js
油丶酸萝卜别吃1 小时前
Vue3 中如何在 setup 语法糖下,通过 Layer 弹窗组件弹出自定义 Vue 组件?
前端·vue.js·arcgis
阿巴~阿巴~2 小时前
自定义协议设计与实践:从协议必要性到JSON流式处理
服务器·网络·网络协议·json·操作系统·自定义协议
虚伪的空想家2 小时前
KVM的ubuntu虚机如何关闭安全启动
linux·安全·ubuntu
测试界的海飞丝8 小时前
10道软件测试面试题及其答案:
服务器·测试工具·职场和发展
t198751288 小时前
在Ubuntu 22.04系统上安装libimobiledevice
linux·运维·ubuntu
skywalk81638 小时前
linux安装Code Server 以便Comate IDE和CodeBuddy等都可以远程连上来
linux·运维·服务器·vscode·comate
J***Q2928 小时前
Vue数据可视化
前端·vue.js·信息可视化
@游子8 小时前
内网渗透笔记-Day5
运维·服务器
晚风吹人醒.9 小时前
缓存中间件Redis安装及功能演示、企业案例
linux·数据库·redis·ubuntu·缓存·中间件