简易版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
    })
相关推荐
無识9 分钟前
Linux-第四章web服务
linux·运维·服务器
悟忧13 分钟前
规避ProseMirror React渲染差异带来的BUG
前端
一叶知秋yyds17 分钟前
Centos 安装 Docker教程
linux·docker·centos
小皮虾20 分钟前
小程序云开发有类似 uniCloud 云对象的方案吗?有的兄弟,有的!
前端·javascript·小程序·云开发
fie888920 分钟前
在CentOS 7上集成cJSON库的方法
linux·运维·centos
Android疑难杂症23 分钟前
鸿蒙Notification Kit通知服务开发快速指南
android·前端·harmonyos
T___T24 分钟前
全方位解释 JavaScript 执行机制(从底层到实战)
前端·面试
阳懿29 分钟前
meta-llama-3-8B下载失败解决。
前端·javascript·html
带土130 分钟前
5. Unix/Linux 系统常用类型别名清单
linux·unix
爱吃橘的橘猫30 分钟前
如何解决VMware虚拟机中Linux系统终端不显示ens33 inet IP地址的问题
linux·运维·服务器·虚拟机