简易版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
    })
相关推荐
Mr_Xuhhh3 分钟前
深入Java多线程进阶:从锁策略到并发工具全解析
前端·数据库·python
funnycoffee1234 分钟前
华为USG防火墙的HRP逃逸是什么机制?
运维·服务器·网络·华为usg
阿捞212 分钟前
Inertia.js 持久布局实现原理
前端·javascript·html
不会写DN14 分钟前
如何在纯前端中通过手势交互来控制星球的转动
前端·交互
念恒1230615 分钟前
Linux初识
linux·服务器·c++
开开心心就好28 分钟前
能把网页藏在Word里的实用摸鱼工具
linux·运维·服务器·windows·随机森林·逻辑回归·excel
Bruce_Liuxiaowei30 分钟前
技嘉Aorus主板Win10引导故障深度修复:从网络重置到注册表移植
服务器·网络·windows·microsoft
liliangcsdn33 分钟前
sentence-transformer如何离线加载和使用模型
开发语言·前端·php
Lucis__34 分钟前
Linux网络:基于协议栈原理实现UDP通信
linux·网络·udp
老绿光35 分钟前
Python 字典完全指南:从入门到实战
linux·服务器·python