简易版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
    })
相关推荐
charlie11451419110 小时前
Linux 字符设备驱动:cdev、设备号与设备模型
linux·开发语言·驱动开发·c
handler0110 小时前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
zhouwy11310 小时前
Linux进程与线程编程详解
linux·c++
CDN36010 小时前
排查实录:网站偶发502/504错误?360CDN回源超时配置与日志分析技巧
前端·数据库
我星期八休息11 小时前
IT疑难杂症诊疗室:AI时代工程师Superpowers进化论
linux·开发语言·数据结构·人工智能·python·散列表
之歆11 小时前
Day07_CSS盒子模型 · 样式继承 · 用户代理样式
前端·css
切糕师学AI11 小时前
深入解析 Zsh 与 Oh-My-Zsh:打造高效现代化终端
linux·终端·zsh
DanCheOo11 小时前
AI 应用的安全架构:Prompt 注入、数据泄露、权限边界
前端·人工智能·prompt·安全架构
切糕师学AI12 小时前
Ubuntu 下 Git 完全使用指南
linux·git·ubuntu
草履虫君12 小时前
VMware 虚拟机网络性能优化指南:从 11 秒到 4 秒的完整调优实践
服务器·网络·经验分享·性能优化