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

学习记录-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>

相关文章:

  • 【10】Strongswan collections —— array
  • 使用HTTP提交git时,每次都要输入用户名和密码的解决方案
  • 使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第五讲)
  • 寻找重复数 - LeetCode 287 题解笔记
  • Linux 系统检测进程死锁的方法
  • 今日 GitHub 热门项目大赏,你 pick 谁?
  • 4.go语言数组
  • 1.1 计算机网络的概念
  • 基于python的4个小游戏(免费直接使用)
  • LLaMA-Factory使用实战
  • Fiddler抓取HTTPS
  • Python中的Requests库
  • 使用VSCODE导致CPU占用率过高的处理方法
  • 【力扣hot100题】(001)字母异位词分组
  • Java 并发编程面经
  • RK3588,V4l2 读取Gmsl相机, Rga yuv422转换rgb (mmap)
  • 港中文迈向安全的具身AI!EARBench:基础模型在具身AI任务规划中的物理风险评估
  • Pytorch--tensor.view()
  • VSCode Flutter 快捷键
  • swagger上传图片请求报错
  • 有什么免费ppt模板网站/百度竞价被换着ip点击
  • 目前做哪个网站能致富/深圳整合营销
  • 网站怎么防k/如何做宣传推广效果最好
  • 网站制作b s的基本步骤/自媒体运营主要做什么
  • 重庆 网站设计/百度免费推广平台
  • 美国做网站/mac923水蜜桃923色号