XMLHttpRequest以及Promise对象的使用

AJAX原理

通过[XHR]XMLHttpRequest对象来和服务器进行交互,axios库的底层也是通过XMLHttpRequest来和服务器进行交互,只是将实现细节进行了封装,让操作更加简洁

可以用于某些只需和服务器进行少次交互的静态网站进行使用,减少代码的体积

如何使用XMLHttpRequest

  1. 创建对象
  2. 配置请求方法和url地址–对象.open('请求方法','请求url地址')
  3. 监听loadend事件–即为该对象绑定loadend事件,通过回调函数接收响应结果
  4. 通过对象.send()来发起请求

通过获取省份来进行这个对象的使用

/*** 目标:使用XMLHttpRequest对象与服务器通信*  1. 创建 XMLHttpRequest 对象*  2. 配置请求方法和请求 url 地址*  3. 监听 loadend 事件,接收响应结果*  4. 发起请求*///创建对象const xhr = new XMLHttpRequest();//通过open方法配置请求方法和请求url地址xhr.open('GET', 'http://hmajax.itheima.net/api/province');//为该对象绑定loadend事件xhr.addEventListener('loadend', () => {//获取响应结果console.log(xhr.response);//由于返回的结果为json格式的数据,所以需要转换为对象格式的数据const data = JSON.parse(xhr.response);console.log(data.list.join('<br>'));document.querySelector('.province').innerHTML = data.list.join('<br>');})//发起一次请求xhr.send();

XMLHttpRequest如何添加查询参数

在地址后面加上?变量名=变量值&变量名=变量值...

地区查询

步骤

  1. 为查询按钮绑定点击事件
  2. 获取省份名字和城市名字
  3. 创建XMLHttpRequest对象并发起请求
  4. 将获取的地区列表进行map()方法的调用,将每个元素变为一个li标签,并通过join()方法实现拼接变成字符串
  5. 获取要插入标签,并将字符串插入其中

代码

 /*** 目标: 根据省份和城市名字, 查询对应的地区列表*///为查询按钮绑定点击事件document.querySelector('.btn-primary').addEventListener('click', () => {//获取省份名字和城市名字const provincedata = document.querySelector('.province').value;const citydata = document.querySelector('.city').value;// console.log(provincedata);// console.log(citydata);//创建XMLHttpRequest对象并发起请求const xhrwhere = new XMLHttpRequest();xhrwhere.open('GET', `http://hmajax.itheima.net/api/area?pname=${provincedata}&cname=${citydata}`);xhrwhere.addEventListener('loadend', () => {// console.log(xhrwhere.response);console.log(JSON.parse(xhrwhere.response).list);//将获取的地区列表进行map()方法的调用,将每个元素变为一个li标签,并通过join()方法实现拼接变成字符串const wherestr = JSON.parse(xhrwhere.response).list.map(function (ele) {return `<li class="list-group-item">${ele}</li>`}).join('');//获取要插入标签document.querySelector('.list-group').innerHTML = wherestr;})xhrwhere.send();})

如何发起请求的同时进行数据提交

首先得设置请求头,表明要传输数据的格式 setRequestHeader

在发起请求的时候要同时将要传的数据通过参数进行传输 send(data)

小知识:将对象转为JSON字符串格式

const str = JSON.stringify(obj);

数据提交案例之注册用户

步骤:

  1. 为注册按钮绑定点击事件
  2. 创建xhr对象
  3. 带上请求方法和地址
  4. 为xhr绑定loadend事件,并通过回调函数接收响应结果
  5. 配置请求头,如传输数据格式
  6. 发送请求并携带要提交的数据

代码

 /*** 目标:使用xhr进行数据提交-完成注册功能*///为注册按钮绑定点击事件document.querySelector('.reg-btn').addEventListener('click', () => {//创建xhr对象const xhr = new XMLHttpRequest();//带上请求方法和地址xhr.open('POST', 'http://hmajax.itheima.net/api/register');//为xhr对象绑定loadend事件,以便返回响应结果xhr.addEventListener('loadend', () => {//获取响应结果console.log(xhr.response);})//配置请求头信息 -- 由于要传数据给服务器xhr.setRequestHeader('Content-Type', 'application/json');//设置请求体数据const user = {username: "lhwoaini",password: "1234567"};//将数据转换为json格式const userStr = JSON.stringify(user);//发送请求并携带json格式数据xhr.send(userStr);})

认识Pormise

一个对象,用于表示一个异步操作的最终完成或失败及其结果值

作用

  • 成功和失败程序,可以关联对应处理程序

  • 了解axios内部原理

如何使用

  1. 创建一个Promise对象
  2. 在构造函数中调用resolve和reject函数
  3. 在Promise对象的回调函数中进行异步操作,并通过判断来执行对应resolve还是reject函数
  4. 分别进行已兑现和已拒绝状态进行不同的关联处理then(result => {}) catch(error => {})
image-20241109220019921

注册用户成功与否来印证Promise对象的作用

步骤

  1. 为注册按钮绑定点击事件
  2. 创建Promise对象
  3. 创建xhr对象
  4. 带上请求方法和地址
  5. 为xhr对象绑定loadend事件,以便返回响应结果
  6. 由于响应结果为JSON格式的字符串,无法进行判断,因此进行数据类型替换
  7. 对响应结果进行判断,以此来判断调用哪个函数 – reslove or reject
  8. 配置请求头信息 – 要传数据给服务器,由于响应结果为JSON格式的字符串,无法进行判断,因此进行数据类型替换
  9. 将数据转换为json格式
  10. 分别调用then和catch进行关联状态的函数
/*** 目标:使用xhr进行数据提交-完成注册功能*///为注册按钮绑定点击事件document.querySelector('.reg-btn').addEventListener('click', () => {//创建Promise对象const p = new Promise((resolve, reject) => {//创建xhr对象const xhr = new XMLHttpRequest();//带上请求方法和地址xhr.open('POST', 'http://hmajax.itheima.net/api/register');//为xhr对象绑定loadend事件,以便返回响应结果xhr.addEventListener('loadend', () => {//获取响应结果console.log(xhr.response);//由于响应结果为JSON格式的字符串,无法进行判断,因此进行数据类型替换const reData = JSON.parse(xhr.response);console.log(reData);//对响应结果进行判断if (reData.code == 10000) {resolve('成功注册');} else {reject('因为各种原因注册失败了');}})//配置请求头信息 -- 由于要传数据给服务器xhr.setRequestHeader('Content-Type', 'application/json');//设置请求体数据const user = {username: "lhwoain1111",password: "1234567"};//将数据转换为json格式const userStr = JSON.stringify(user);//发送请求并携带json格式数据xhr.send(userStr);})//分别调用then和catch进行关联状态的函数p.then(result => {console.log(result);}).catch(error => {console.log(error);})})

案例之是否成功获取省份列表

代码:

 /*** 目标:使用Promise管理XHR请求省份列表*  1. 创建Promise对象*  2. 执行XHR异步代码,获取省份列表*  3. 关联成功或失败函数,做后续处理*///创建Promise对象const p = new Promise((resolve, reject) => {//创建xhr对象const xhr = new XMLHttpRequest();//配置地址以及请求方法xhr.open('GET', 'http://hmajax.itheima.net/api/province');//绑定loadend事件,并返回响应结果xhr.addEventListener('loadend', () => {console.log(xhr.response);//将JSON格式的字符串转换为对象,并获取省份列表const datalist = JSON.parse(xhr.response);console.log(datalist.list);//获取要写入标签并写入document.querySelector('.my-p').innerHTML = datalist.list.join('<br>')//判断是否获取省份成功,并调用对应函数if (datalist.message === '获取省份成功') {resolve('成功了')} else {reject('因为不知名原因出错哩')}})//发起请求xhr.send();})//为p的两种状态分别配置两种不同的处理函数p.then(result => {alert(result);}).catch(error => {//大多数报错不用让用户显性知道内容console.log(error);})

AJAX原理

通过[XHR]XMLHttpRequest对象来和服务器进行交互,axios库的底层也是通过XMLHttpRequest来和服务器进行交互,只是将实现细节进行了封装,让操作更加简洁

可以用于某些只需和服务器进行少次交互的静态网站进行使用,减少代码的体积

如何使用XMLHttpRequest

  1. 创建对象
  2. 配置请求方法和url地址–对象.open('请求方法','请求url地址')
  3. 监听loadend事件–即为该对象绑定loadend事件,通过回调函数接收响应结果
  4. 通过对象.send()来发起请求

通过获取省份来进行这个对象的使用

/*** 目标:使用XMLHttpRequest对象与服务器通信*  1. 创建 XMLHttpRequest 对象*  2. 配置请求方法和请求 url 地址*  3. 监听 loadend 事件,接收响应结果*  4. 发起请求*///创建对象const xhr = new XMLHttpRequest();//通过open方法配置请求方法和请求url地址xhr.open('GET', 'http://hmajax.itheima.net/api/province');//为该对象绑定loadend事件xhr.addEventListener('loadend', () => {//获取响应结果console.log(xhr.response);//由于返回的结果为json格式的数据,所以需要转换为对象格式的数据const data = JSON.parse(xhr.response);console.log(data.list.join('<br>'));document.querySelector('.province').innerHTML = data.list.join('<br>');})//发起一次请求xhr.send();

XMLHttpRequest如何添加查询参数

在地址后面加上?变量名=变量值&变量名=变量值...

地区查询

步骤

  1. 为查询按钮绑定点击事件
  2. 获取省份名字和城市名字
  3. 创建XMLHttpRequest对象并发起请求
  4. 将获取的地区列表进行map()方法的调用,将每个元素变为一个li标签,并通过join()方法实现拼接变成字符串
  5. 获取要插入标签,并将字符串插入其中

代码

 /*** 目标: 根据省份和城市名字, 查询对应的地区列表*///为查询按钮绑定点击事件document.querySelector('.btn-primary').addEventListener('click', () => {//获取省份名字和城市名字const provincedata = document.querySelector('.province').value;const citydata = document.querySelector('.city').value;// console.log(provincedata);// console.log(citydata);//创建XMLHttpRequest对象并发起请求const xhrwhere = new XMLHttpRequest();xhrwhere.open('GET', `http://hmajax.itheima.net/api/area?pname=${provincedata}&cname=${citydata}`);xhrwhere.addEventListener('loadend', () => {// console.log(xhrwhere.response);console.log(JSON.parse(xhrwhere.response).list);//将获取的地区列表进行map()方法的调用,将每个元素变为一个li标签,并通过join()方法实现拼接变成字符串const wherestr = JSON.parse(xhrwhere.response).list.map(function (ele) {return `<li class="list-group-item">${ele}</li>`}).join('');//获取要插入标签document.querySelector('.list-group').innerHTML = wherestr;})xhrwhere.send();})

如何发起请求的同时进行数据提交

首先得设置请求头,表明要传输数据的格式 setRequestHeader

在发起请求的时候要同时将要传的数据通过参数进行传输 send(data)

小知识:将对象转为JSON字符串格式

const str = JSON.stringify(obj);

数据提交案例之注册用户

步骤:

  1. 为注册按钮绑定点击事件
  2. 创建xhr对象
  3. 带上请求方法和地址
  4. 为xhr绑定loadend事件,并通过回调函数接收响应结果
  5. 配置请求头,如传输数据格式
  6. 发送请求并携带要提交的数据

代码

 /*** 目标:使用xhr进行数据提交-完成注册功能*///为注册按钮绑定点击事件document.querySelector('.reg-btn').addEventListener('click', () => {//创建xhr对象const xhr = new XMLHttpRequest();//带上请求方法和地址xhr.open('POST', 'http://hmajax.itheima.net/api/register');//为xhr对象绑定loadend事件,以便返回响应结果xhr.addEventListener('loadend', () => {//获取响应结果console.log(xhr.response);})//配置请求头信息 -- 由于要传数据给服务器xhr.setRequestHeader('Content-Type', 'application/json');//设置请求体数据const user = {username: "lhwoaini",password: "1234567"};//将数据转换为json格式const userStr = JSON.stringify(user);//发送请求并携带json格式数据xhr.send(userStr);})

认识Pormise

一个对象,用于表示一个异步操作的最终完成或失败及其结果值

作用

  • 成功和失败程序,可以关联对应处理程序

  • 了解axios内部原理

如何使用

  1. 创建一个Promise对象
  2. 在构造函数中调用resolve和reject函数
  3. 在Promise对象的回调函数中进行异步操作,并通过判断来执行对应resolve还是reject函数
  4. 分别进行已兑现和已拒绝状态进行不同的关联处理then(result => {}) catch(error => {})
image-20241109220019921

注册用户成功与否来印证Promise对象的作用

步骤

  1. 为注册按钮绑定点击事件
  2. 创建Promise对象
  3. 创建xhr对象
  4. 带上请求方法和地址
  5. 为xhr对象绑定loadend事件,以便返回响应结果
  6. 由于响应结果为JSON格式的字符串,无法进行判断,因此进行数据类型替换
  7. 对响应结果进行判断,以此来判断调用哪个函数 – reslove or reject
  8. 配置请求头信息 – 要传数据给服务器,由于响应结果为JSON格式的字符串,无法进行判断,因此进行数据类型替换
  9. 将数据转换为json格式
  10. 分别调用then和catch进行关联状态的函数
/*** 目标:使用xhr进行数据提交-完成注册功能*///为注册按钮绑定点击事件document.querySelector('.reg-btn').addEventListener('click', () => {//创建Promise对象const p = new Promise((resolve, reject) => {//创建xhr对象const xhr = new XMLHttpRequest();//带上请求方法和地址xhr.open('POST', 'http://hmajax.itheima.net/api/register');//为xhr对象绑定loadend事件,以便返回响应结果xhr.addEventListener('loadend', () => {//获取响应结果console.log(xhr.response);//由于响应结果为JSON格式的字符串,无法进行判断,因此进行数据类型替换const reData = JSON.parse(xhr.response);console.log(reData);//对响应结果进行判断if (reData.code == 10000) {resolve('成功注册');} else {reject('因为各种原因注册失败了');}})//配置请求头信息 -- 由于要传数据给服务器xhr.setRequestHeader('Content-Type', 'application/json');//设置请求体数据const user = {username: "lhwoain1111",password: "1234567"};//将数据转换为json格式const userStr = JSON.stringify(user);//发送请求并携带json格式数据xhr.send(userStr);})//分别调用then和catch进行关联状态的函数p.then(result => {console.log(result);}).catch(error => {console.log(error);})})

案例之是否成功获取省份列表

代码:

 /*** 目标:使用Promise管理XHR请求省份列表*  1. 创建Promise对象*  2. 执行XHR异步代码,获取省份列表*  3. 关联成功或失败函数,做后续处理*///创建Promise对象const p = new Promise((resolve, reject) => {//创建xhr对象const xhr = new XMLHttpRequest();//配置地址以及请求方法xhr.open('GET', 'http://hmajax.itheima.net/api/province');//绑定loadend事件,并返回响应结果xhr.addEventListener('loadend', () => {console.log(xhr.response);//将JSON格式的字符串转换为对象,并获取省份列表const datalist = JSON.parse(xhr.response);console.log(datalist.list);//获取要写入标签并写入document.querySelector('.my-p').innerHTML = datalist.list.join('<br>')//判断是否获取省份成功,并调用对应函数if (datalist.message === '获取省份成功') {resolve('成功了')} else {reject('因为不知名原因出错哩')}})//发起请求xhr.send();})//为p的两种状态分别配置两种不同的处理函数p.then(result => {alert(result);}).catch(error => {//大多数报错不用让用户显性知道内容console.log(error);})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/468011.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

势不可挡 创新引领 | 生信科技SOLIDWORKS 2025新品发布会·苏州站精彩回顾

2024年11月01日&#xff0c;由生信科技举办的SOLIDWORKS 2025新产品发布会在江苏苏州圆满落幕。现场邀请到制造业的专家学者们一同感受SOLIDWORKS 2025最新功能&#xff0c;探索制造业数字化转型之路。 在苏州站活动开场&#xff0c;达索系统专业客户事业部华东区渠道经理马腾飞…

论文阅读《Structure-from-Motion Revisited》

摘要 增量式地运动结构恢复是从无序图像集合中进行三维重建的一个普遍策略。虽然增量式地重建系统在各个方面上都取得了巨大的进步&#xff0c;但鲁棒性、准确性、完整度和尺度仍然是构建真正通用管道的关键问题。我们提出了一种新的运动结构恢复技术&#xff0c;它改进了目前…

【人工智能】10分钟解读-深入浅出大语言模型(LLM)——从ChatGPT到未来AI的演进

文章目录 一、前言二、GPT模型的发展历程2.1 自然语言处理的局限2.2 机器学习的崛起2.3 深度学习的兴起2.3.1 神经网络的训练2.3.2 神经网络面临的挑战 2.4 Transformer的革命性突破2.4.1 Transformer的核心组成2.4.2 Transformer的优势 2.5 GPT模型的诞生与发展2.5.1 GPT的核心…

Vue 组件传递数据-Props(六)

一、Props传递静态数据 defineProps() 和 defineEmits() 为了在声明 props 和 emits 选项时获得完整的类型推导支持&#xff0c;我们可以使用 defineProps 和 defineEmits API&#xff0c;它们将自动地在 <script setup> 中可用&#xff1a; defineProps 和 defineEmits …

移动开发(七):.NET MAUI使用RESTAPI实现查询天气笔记

目录 一、接口准备 二、实体部分 三、页面部分 四、后台代码逻辑 五、总结 在移动开发过程中,第三方对接是非常常见的。今天给大家分享.NET MAUI如何使用REST API实现输入城市名称查询天气的示例,希望对大家学习.NET MAUI可以提供一些帮助! 一、接口准备 首先我们需要…

【网络安全 | 并发问题】Nginx重试机制与幂等性问题分析

未经许可,不得转载。 文章目录 业务背景Nginx的错误重试机制proxy_next_upstream指令配置重试500状态码非幂等请求的重试问题幂等性和非幂等性请求non_idempotent选项的使用解决方案业务背景 在现代互联网应用中,高可用性(HA)是确保系统稳定性的关键要求之一。为了应对服务…

C++入门基础(三)

目录 引用引用概念例子1例子2例子3例子4常引用拓展 引用 引用概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空 间&#xff0c;它和它引用的变量共用同一块内存空间。 比如&#xff1a;同学A有一个别名为张…

ChatGPT键盘快捷键(按ctrl + /呼出)

文章目录 ChatGPT键盘快捷键- 打开新聊天: Ctrl Shift O- 聚焦聊天输入: Shift Esc- 复制最后一个代码块: Ctrl Shift ;- 复制最后一个回复: Ctrl Shift C- 设置自定义指令: Ctrl Shift I- 切换边栏: Ctrl Shift S- 删除聊天: Ctrl Shift ⌫- 显示快捷方式: Ctrl …

VCS:三步法的仿真流程

相关阅读 VCShttps://blog.csdn.net/weixin_45791458/category_12828763.html 使用三步流程仿真设计涉及三个基本步骤&#xff1a; 分析(Analysis)展开(Elaboration)仿真(Simulation) VCS使用这三个步骤编译任何设计&#xff0c;无论所使用源代码的是HDL、HVL或其他支持的技术…

万字长文解读深度学习——Transformer

文章目录 &#x1f33a;深度学习面试八股汇总&#x1f33a;初识Transformer1. 编码器-解码器架构解码器的额外结构 2. 自注意力机制&#xff08;Self-Attention Mechanism&#xff09;解码器中的注意力机制的2点特殊 3. 位置编码&#xff08;Positional Encoding&#xff09;4.…

花指令例子

如图所示&#xff1a; 指令EB FF的汇编代码为jmp -1&#xff0c;CPU执行到地址处0x6c80c0的指令EB FF时(jmp -1)&#xff0c;EIP为6c80c2, 执行后&#xff0c;EIP为0x6c80c1。但是反汇编器无法自动识别该指令。

校园周边美食探索及分享平台

摘要&#xff1a; 美食一直是与人们日常生活息息相关的产业。传统的电话订餐或者到店消费已经不能适应市场发展的需求。随着网络的迅速崛起&#xff0c;互联网日益成为提供信息的最佳俱渠道和逐步走向传统的流通领域&#xff0c;传统的美食业进而也面临着巨大的挑战&#xff0…

CSS高级技巧_精灵图_字体图标_CSS三角_vertical-align(图像和文字居中在同一行)_溢出文字省略号显示

目录 CSS高级技巧 1. 精灵图 1.1 为什么需要精灵图 1.2 精灵图&#xff08;sprites&#xff09;的使用 1.2 精灵图的使用 案例&#xff1a;拼出自己名字 2. 字体图标 2.1 字体图标的产生 2.2 字体图标的优点 2.3 字体图标的下载 2.4 字体图标的引入 2.4.1 字体文件格…

SpringBoot框架在资产管理中的应用

3系统分析 3.1可行性分析 通过对本企业资产管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本企业资产管理系统采用Spring Boot框架&#xff0c;JAVA作…

停车场微信小程序的设计与实现(lw+演示+源码+运行)

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了停车场微信小程序的开发全过程。通过分析停车场微信小程序管理的不足&#xff0c;创建了一个计算机管理停车场微信小程序的方案。文章介绍了停车场微信小程序的…

CCF ChinaOSC |「开源科学计算与系统建模openSCS专题分论坛」11月9日与您相约深圳

2024年11月9日至10日&#xff0c;以“湾区聚力 开源启智”为主题的2024年中国计算机学会中国开源大会&#xff08;CCF ChinaOSC&#xff09;将在深圳召开。大会将汇聚国内外学术界、顶尖科技企业、科研机构及开源社区的精英力量&#xff0c;共同探索人工智能技术和人类智慧的无…

「C/C++」C++ STL容器库 之 std::map 键值容器类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

Oracle简介、环境搭建和基础DML语句

第一章 ORACLE 简介 1.1 什么是 ORACLE ORACLE数据库系统是美国ORACLE 公司&#xff08;甲骨文&#xff09;提供的以分布式数据库为核心的一组软件产品&#xff0c;是目前最流行的客户/服务器体系结构的数据库之一。 英文官网&#xff1a;Database | Oracle 中文官网&#xff…

考研要求掌握C语言(归并排序)

归并排序考啥&#xff1f; 在考研中归并排序只出在选择题&#xff0c;理解原理很重要 且在考研中考靓靓归并&#xff0c;还是比较简单的 归并排序原理 就是每次分一半&#xff0c;直到每一半只含有一个或不能再分时&#xff0c;一半一半的进行排序&#xff0c;最终合并两个…

软件工程概论项目(一)

距离软工概论项目答辩还有五个周的时间&#xff0c;需要做一个项目&#xff0c;把心得体会都做一个记录。以便以后进行回顾和反思 这里写目录标题 一、环境的配置gitbash 一、环境的配置 gitbash 安装gitbash&#xff0c;简单说两句&#xff0c;git用于多人协作和代码托管&am…