当前位置: 首页 > article >正文

学习记录-Ajax-自封装axios函数

目录

  • 自封装axios函数
  • 封装axios函数实现步骤
      • 1. 准备阶段
      • 2. 实现无参get请求
      • 3.实现有参get请求
      • 4. 实现post请求
  • 完整实例代码

自封装axios函数

封装axios函数实现步骤

1. 准备阶段

理解axios函数的底层原理,包括Promise,XMLHttpRequest等概念

  1. XMLHttpRequest工作过程
    先创建一个XMLHttpRequest实例对象,设置请求方式和url地址,绑定loadend事件,响应.reponse,最后在发送数据。如果请求方式为get,则需要将查询参数写在url网址后,如果请求方式为post,则寻要在发送请求前设置相应头
  2. promise工作
    先创建一个promise实例对象,里面传递resolve,reject两个参数。resolve代表请求成功,调用then;reject代表请求失败,调用catch

自行准备接口

2. 实现无参get请求

利用promise的.then方法,封装axios函数,返回一个promise实例对象,赋予函数.then方法

  1. 如果method为空,则默认为get方法
  2. 判断ajax.status的值,如果访问成功,则用resolve传response,如果访问失败,则用reject抛错误
	function myAxios(obj) {
      return new Promise((resolve, reject) => {				//确保自定义axios函数可以调用.then和.catch方法
        const ajax = new XMLHttpRequest()
        ajax.open(obj.method || 'get', obj.url)				//如果method为空,则为get方法
        ajax.addEventListener('loadend', (e) => {
          if(ajax.status>=200&&ajax.status<300){			//判断相应是否成功
            resolve(ajax.response)
          }else{
            reject(new Error(ajax.response))
          }         
        })
      ajax.send()
      })

    }

3.实现有参get请求

在配置请求方法前,对params进行判断,如果存在params,则将其转换为查询字符串,并且拼接到url网址后

    	const a = obj.params ? '?'+new URLSearchParams(obj.params) : ''			//转换查询参数
        ajax.open(obj.method || 'get', `${obj.url}${a}`)						//查询参数拼接

4. 实现post请求

在数据发送前判断data是否存在,如果存在则先设置相应头,在将data数据以JSON字符串的形式发送出去

	if(obj.data){
          ajax.setRequestHeader('Content-Type', 'application/json')
          ajax.send(JSON.stringify(obj.data))				//发送的数据为JSON字符串形式
        }
       else{
        ajax.send()
       }

完整实例代码

<!DOCTYPE html>
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>封装_简易axios函数_获取省份列表</title>
</head>

<body>
  <script>
    function myAxios(obj) {
      return new Promise((resolve, reject) => {
        const ajax = new XMLHttpRequest()
        const a = obj.params ? '?' + new URLSearchParams(obj.params) : ''
        ajax.open(obj.method || 'get', `${obj.url}${a}`)
        ajax.addEventListener('loadend', (e) => {
          if (ajax.status >= 200 && ajax.status < 300) {
            resolve(ajax.response)
          } else {
            reject(new Error(ajax.response))
          }
        })
        if (obj.data) {
          ajax.setRequestHeader('Content-Type', 'application/json')
          ajax.send(JSON.stringify(obj.data))
        }
        else {
          ajax.send()
        }
      })
    }
    myAxios({
      url: 'http://hmajax.itheima.net/api/register',
      data: {
        username: 'baiyuansong',
        password: '1234567'
      },
      method: 'post'
    }).then(res => {
      console.dir(res)
    })
  </script>
</body>

</html>

http://www.kler.cn/a/612052.html

相关文章:

  • RAMS(区域大气建模系统)评估土地利用/覆被变化的气候与水文效应
  • 【Django】教程-3-数据库相关介绍
  • NVIDIA Megatron Core:大规模语言模型训练与部署框架详解
  • [250325] Claude AI 现已支持网络搜索功能!| ReactOS 0.4.15 发布!
  • 英语不好,可以考取Oracle OCP认证吗?
  • HO与OH差异之Navigation三
  • Android第六次面试总结(自定义 View与事件分发)
  • Unity Shader编程】之FallBack
  • CSS3:现代Web设计的魔法卷轴
  • 行为型——责任链模式
  • 本地文生图使用插件(Stable Diffusion)
  • MybatisPlus(SpringBoot版)学习第五讲:条件构造器和常用接口
  • poetry install --with aws
  • SQL语言的安全开发
  • 网易邮箱DolphinScheduler迁移实战:从部署到优化,10倍效率提升的内部经验
  • 数据结构6-图
  • 数制——FPGA
  • C++ set容器总结
  • Linux 目录结构(文件系统结构)示例说明
  • 《Spring Cloud Eureka 高可用集群实战:从零构建 99.99% 可靠性的微服务注册中心》