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

【ajax核心03】封装底层axios函数

目录

一:步骤总结

二:获取数据需求:

三:查找数据需求:

四:发送数据需求:

一:步骤总结

  1. 定义myAxios函数,接收配置对象,返回Promise对象
  2. 发送XHR请求,设置默认请求方式为GET
  3. 调用成功/失败处理程序
  4. 使用myAxios函数,获取数据
function myAxios(config){return new Promise((resolve,reject)=>{//XHR请求//调用成功/失败的处理程序})    
}
myAxios({
}).then(result=>{}).catch(error=>{})

其实底层部分源码框架是这样的,只不过不同的需求,往函数中传入的配置对象有些许不同

二:获取数据需求:

/**

     * 目标:封装_简易axios函数_获取省份列表

     *  1. 定义myAxios函数,接收配置对象,返回Promise对象

     *  2. 发起XHR请求,默认请求方法为GET

     *  3. 调用成功/失败的处理程序

     *  4. 使用myAxios函数,获取省份列表展示

    */

    //*  1. 定义myAxios函数,接收配置对象,返回Promise对象function myAxios(config) {return new Promise((resolve, reject) => {//*  2. 发起XHR请求,默认请求方法为GETconst xhr = new XMLHttpRequest()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))}})xhr.send()})}//*  3. 调用成功/失败的处理程序myAxios({url: 'https://hmajax.itheima.net/api/province1',}).then(//*  4. 使用myAxios函数,获取省份列表展示result => {console.log(result);document.body.innerHTML = result.list.join('<br>')}).catch(error => {document.body.innerHTML = error.message})

三:查找数据需求:

/**

     * 目标:封装_简易axios函数_获取地区列表

     *  1. 判断有params选项,携带查询参数(核心)

     *  2. 使用URLSearchParams转换,并携带到url上(核心)

     *  3. 使用myAxios函数,获取地区列表

    */

 function myAxios(config) {return new Promise((resolve, reject) => {const xhr = new XMLHttpRequest()if (config.params) {//核心// 2.使用URLSearchParams,将传参对象中的params查询对象进行转化,并携带到url上const paramsObj = new URLSearchParams(config.params)console.log(paramsObj);const queryString = paramsObj.toString()//把查询字符串拼接在url?后面config.url += `?${queryString}`//核心}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))}})xhr.send()})}myAxios({url: "https://hmajax.itheima.net/api/area",params: {pname: "辽宁省",cname: '大连市'}}).then(result => {console.log(result);document.body.innerHTML = result.list.join('<br>')})

四:发送数据需求:

 /**

     * 目标:封装_简易axios函数_注册用户

     *  1. 判断有data选项,携带请求体

     *  2. 转换数据类型,在send中发送

     *  3. 使用myAxios函数,完成注册用户

    */

function myAxios(config) {return new Promise((resolve, reject) => {const xhr = new XMLHttpRequest()if (config.params) {const paramsObj = new URLSearchParams(config.params)const queryString = paramsObj.toString()config.url += `?${queryString}`}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')//2.转换数据类型,将data中的对象转换为json字符串,在send中发送const jsonStr = JSON.stringify(config.data)xhr.send(jsonStr)} else {xhr.send()}})}
//发送数据需求document.querySelector('.reg-btn').addEventListener('click', () => {myAxios({url: 'https://hmajax.itheima.net/api/register',method: 'post',data: {username: 'itheima9999',password: '123456'}}).then(result => {console.log(result);}).catch(error => {console.log(error);})})

http://www.lryc.cn/news/378892.html

相关文章:

  • python科学计算
  • Leetcode - 132双周赛
  • Mongodb在UPDATE操作中使用$push向数组中插入数据
  • ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 锐化效果
  • 信息系统项目管理师 | 信息系统安全技术
  • Java数据类型与运算符
  • 网络虚拟化考题
  • 《C++ Primer》导学系列:第 7 章 - 类
  • idea intellij 2023打开微服务项目部分module未在左侧项目目录展示(如何重新自动加载所有maven项目model)
  • 生成视频 zeroscope_v2_576w 学习笔记
  • H3C综合实验
  • QThread 与QObject::moveToThread在UI中的应用
  • 安卓逆向案例——X酷APP逆向分析
  • 创新案例|星巴克中国市场创新之路: 2025目标9000家店的挑战与策略
  • 计算机网络 MAC地址表管理
  • 【免费API推荐】:各类API资源免费获取【11】
  • 技术驱动会展:展位导航系统的架构与实现
  • 适用于轨道交通专用的板卡式网管型工业以太网交换机
  • excel基本操作
  • C++系统相关操作2 - 获取系统环境变量
  • 适合小白学习的项目1906java Web智慧食堂管理系统idea开发mysql数据库web结构java编程计算机网页源码servlet项目
  • AI通用大模型不及垂直大模型?各有各的好
  • 农产品价格信息系统小程序
  • 【LLM-多模态】高效多模态大型语言模型综述
  • ASP .Net Core创建一个httppost请求并添加证书
  • Redis入门篇
  • 变电站智能巡检机器人解决方案
  • Linux Kernel入门到精通系列讲解(QEMU-虚拟化篇) 2.5 Qemu实现RTC设备
  • 【自动驾驶】通过下位机发送的加速度、角速度计算机器人在世界坐标系中的姿态
  • Python 设计模式(第2版) -- 第四部分(其他设计模式)