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

Ajax_3 Ajax原理+ (XMLHttpRequest + Promise )+ 封装一个axios插件库,实现功能。

Ajax_3 Ajax原理


01-Ajax原理-XMLHttpRequest


使用XMLHttpRequest

步骤:

  1. 创建XMLHttpRequest对象
  2. 配置请求方法请求url网址
  3. 监听loadend事件,接受响应结果
  4. 发起请求

需求:使用XMLHttpRequest对象与服务器通信

代码示例
 //  1. 创建 XMLHttpRequest 对象const xhr = new XMLHttpRequest()//  2. 配置请求方法和请求 url 地址xhr.open('GET','http://hmajax.itheima.net/api/province')// 3. 监听 loadend 事件,接收响应结果xhr.addEventListener('loadend', () => {console.log(xhr.response)// 字符串转对象const data = JSON.parse(xhr.response)console.log(data.list)// 数组转字符串console.log(data.list.join('<br>'))// 插入到页面中document.querySelector('.my-p').innerHTML = data.list.join('<br>')})//  4. 发起请求xhr.send()
</script>

02-XMLHttpRequest-查询参数


定义:浏览器提供给服务器的额外信息,让服务器返回浏览器想要的结果。


语法:
  1. ?参数名1=值1&参数名2=值2 (在问号后面,多个值用&连接)

参数名是接口文档里面设定的哦!


需求:使用XHR携带查询参数,展示某个省下属的城市列表

代码示例
<script>  
// 1、创建xhr实例对象const xhr = new XMLHttpRequest()// 2、发起请求xhr.open('GET','http://hmajax.itheima.net/api/city?pname=江西省')xhr.addEventListener('loadend', () => {console.log(xhr.response)// 对象转字符串const data = JSON.parse(xhr.response)console.log(data)// 数组转字符串,用换行符分隔console.log(data.list.join('<br>'))// 插入渲染document.querySelector('.city-p').innerHTML = data.list.join('<br>')})xhr.send()</script>

03-地区查询


需求: 根据省份和城市名字, 查询对应的地区列表


代码示例
<script>// 注册点击事件document.querySelector('.sel-btn').addEventListener('click', () => {// 2.收集省份和城市名字const pname = document.querySelector('.province').valueconst cname = document.querySelector('.city').value// 3.组织查询参数的字符串const qObj = {pname,cname}// 将查询参数对象   ->  查询参数的字符串const paramsObj = new URLSearchParams(qObj)// 使用toString()方法将实例对象转为字符串const queryString = paramsObj.toString()console.log(queryString)// 1.创建xhr实例对象const xhr = new XMLHttpRequest()// 2.向服务器发送请求xhr.open('GET', `http://hmajax.itheima.net/api/area?${queryString}`)// 3.监听函数监听服务器响应的信息xhr.addEventListener('loadend', () => {console.log(xhr.response)// 将返回结果对象转字符串const data = JSON.parse(xhr.response)console.log(data.list)// 将数组里面的数据通过map数组映射给标签,记得将数组转为大的字符串const htmlStr = data.list.map(item => {return `<li class="list-group-item">${item}</li>`}).join('')console.log(htmlStr)document.querySelector('.list-group').innerHTML = htmlStr})// 4.发送请求xhr.send()})</script>

04-XMLHttpRequest-提交数据


需求: 通过XHR提交用户名和密码,完成注册功能


代码示例
 document.querySelector('.reg-btn').addEventListener('click', () => {const xhr = new XMLHttpRequest()xhr.open('POST', 'http://hmajax.itheima.net/api/register')xhr.addEventListener('loadend', () => {console.log(xhr.response)})// 自己配置请求参数xhr.setRequestHeader('Content-Type', 'application/json')// 准备好提交的数据const userObj = {username: 'liubuzhu',password: '7654321'}//将参数对象转为字符串  请求体const userStr = JSON.stringify(userObj)// 设置请求体:发起请求xhr.send(userStr)})
</script>

无论是请求还是查询都需要自己配置对象通过API转换后进行操作

查询参数使用路径传参在?后面。

提交请求参数则自己配置请求对象后,在xhr.send(请求参数)


05-认识 Promise


定义: promise对象用于表示一个异步操作的最终完成(或失败 及其结果)

promise的好处
  1. 逻辑更清晰
  2. 了解axios函数内部运作机制
  3. 能解决回调函数低于问题

语法:
  1. 创建一个promise对象,传入resolve和reject参数
  2. 执行异步任务,并传递结果,成功传入resolve,失败传入reject
  3. 接受结果:成功then方法 , 失败 catch方法

代码示例
<script>  
const p = new Promise((resolve,reject) => {// 2.执行异步代码setTimeout(() => {// 成功就直接给resolve传入实参resolve('模拟Ajax请求成功结果')// 失败就直接给reject传入实参reject('模拟Ajax请求失败结果')},2000)})// 3.获取结果p.then(result => {console.log(result)}).catch(error => {console.log(error)})</script>
  • 注意第二步的使用。

06-Promise对象的三种状态


作用
  1. 了解Promise对象如何关联的处理函数,以及代码的执行顺序。

  1. pending状态(待定) new Promise() : 初始状态,既没有被兑现,也没有被拒绝
  2. fulfilled状态 (已兑现) .then(回调函数) :意味着,操作成功完成
  3. rejected状态 (已拒绝) .catch(回调函数) : 意味着,操作失败
  • 注意:Promise对象一旦被 兑现 或者 拒绝,就已经被敲定了, 状态无法再被改变。

代码示例
<script>    
// Promise对象创建时(待定状态),这里的代码都会被执行console.log('Promise对象内开始执行')// 2. 执行异步代码,等待执行结果返回给实参,然后兑现 或者 拒绝给结果setTimeout(() => {// resolve被调用后,  fulfilled状态-已兑现 then()resolve('模拟AJAX请求-成功结果')// reject被调用后,rejected状态-已拒绝 catch()reject(new Error('模拟AJAX请求-失败结果'))}, 2000)
</script>

了解三种状态的执行时机,先是执行Promise里面的同步语句,然后调用兑现和拒绝两种状态,等到 异步代码执行完结果在返回给两种状态。


07-使用Promise + XHR获取省份列表


步骤:

* 1. 创建Promise对象

* 2. 执行XHR异步代码,获取省份列表

* 3. 关联成功或失败函数,做后续处理


代码示例
<script>// 1. 创建Promise对象const p = new Promise((resolve,reject) => {// 2. 执行XHR异步代码,获取省份列表const xhr = new XMLHttpRequest()xhr.open('GET','http://hmajax.itheima.net/api/province')xhr.addEventListener('loadend',() => {// 查看响应状态码// console.log(xhr.status)if (xhr.status >= 200 && xhr.status < 300) {resolve(JSON.parse(xhr.response))  //字符串转对象} else {// 错误我们需要创建一个错误实例对象,并且给构造函数传递错误信息。当实现传递给对调函数reject(new Error(xhr.response))  }})xhr.send()})// 3. 关联成功或失败函数,做后续处理p.then(result => {document.querySelector('.my-p').innerHTML = result.list.join('<br>')}).catch(error => {// 服务器返回的错误信息返回给页面document.querySelector('.my-p').innerHTML = error.message})</script>

08-封装简易的axios-查询、请求、提交


需求:基于Promise + XHR 封装 myAxios函数,获取省份列表展示。


  • 目标:封装_简易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) {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) {const jsonStr = JSON.stringify(config.data)xhr.setRequestHeader('Content-Type', 'application/json')xhr.send(jsonStr)} else {xhr.send()}})
}
//下面直接调用函数(就先使用axios()一样的)根据实际需求配置  myAxios({url: 'http://hmajax.itheima.net/api/register',method: 'POST',data: {usename: 'myaxios010',password: '99999999'}}).then(result => {console.log(result)}).catch(error => {console.dir(error)  })})

2023年8月7日15:38:27

会有综合案例,会单独出一期,同时会补全。

相关文章:

Ajax_3 Ajax原理+ (XMLHttpRequest + Promise )+ 封装一个axios插件库,实现功能。

Ajax_3 Ajax原理 01-Ajax原理-XMLHttpRequest 使用XMLHttpRequest 步骤&#xff1a; 创建XMLHttpRequest对象配置请求方法请求url网址监听loadend事件&#xff0c;接受响应结果发起请求 需求&#xff1a;使用XMLHttpRequest对象与服务器通信 代码示例 // 1. 创建 XMLHttpReq…...

计算机网络(7) --- UDP协议和TCP协议

计算机网络&#xff08;6&#xff09; --- https协议_哈里沃克的博客-CSDN博客https协议https://blog.csdn.net/m0_63488627/article/details/132112683?spm1001.2014.3001.5501 目录 1.补充知识 1.PORT端口号 2.端口号范围划分 3.知名端口号 2.UDP协议 1.UDP报头 2.U…...

Jenkins 修改默认管理员帐号

1、新增一个新的超级管理员用户&#xff0c;并验证能正常登录 2、进入 Jenkins 用户管理目录&#xff1a; /data/software/jenkins/users 3、修改超级管理文件夹的名称为其他名称&#xff0c;如&#xff1a;mv admin_*** ifadm_*** 4、重启Jenkins容器...

FK-坦克大战制作(一)菜单制作

1、Cocos Creator新建2d项目 2.在资源管理器中新建场景menu 新建scences文件夹》新建场景》改名为menu 3.在层级管理器的Canvas下新建Layout节点&#xff0c;并在此节点下新建Label标签 4.双击Label&#xff0c;在属性检查器中进行编辑 5. 添加动画&#xff1a;(对文本进行放大…...

39.利用matlab寻找素数(matlab程序)

1.简述 MATLAB嵌套循环允许使用一个循环在另一循环内&#xff0c;下面用一个嵌套循环来把所有从1到100的素数显示出来。 2.代码 %% 学习目标&#xff1a;寻找素数 clear sum5; %求0&#xff5e;100素数之和 ss0; %用来标定是否是素数&#xff0c;0表示不是 p…...

卡尔曼滤波算法demo

代码 learn_kalman.py #codingutf-8 import numpy as np import time from kinematic_model import freedrop from controller import kalman_filterimport matplotlib.pyplot as plt # 支持中文 import matplotlib as mpl mpl.rcParams[font.family]SimHei plt.rcParams[a…...

MySQL游标(二十九)

二八佳人体似酥&#xff0c;腰悬利剑斩愚夫&#xff0c;虽然不见人头落,暗里教君骨髓枯。 上一章简单介绍了MySQL流程控制(二十八) ,如果没有看过,请观看上一章 一. 游标 一.一 什么是游标 虽然我们也可以通过筛选条件 WHERE 和 HAVING&#xff0c;或者是限定返回记录的关键…...

内生安全构建数据存储

一、数据安全成为防护核心&#xff0c;存储安全防护不容有失 1、数据作为企业的核心资产亟需重点保护&#xff0c;数据安全已成网络空间防护核心 2、国家高度重视关键信息基础设施的数据安全&#xff0c;存储安全已成为审核重点 二、存储安全是数据安全的关键一环&#xff0c;应…...

Docker+Consul+Registrator 实现服务注册与发现

第四阶段 时 间&#xff1a;2023年8月8日 参加人&#xff1a;全班人员 内 容&#xff1a; DockerConsulRegistrator 实现服务注册与发现 目录 一、服务注册中心引言 CAP理论是分布式架构中重要理论&#xff1a; 二、服务注册中心软件 &#xff08;一&#xff09;Zoo…...

深入学习JVM —— GC垃圾回收机制

前言 前面荔枝已经梳理了有关JVM的体系结构和类加载机制&#xff0c;也详细地介绍了JVM在类加载时的双亲委派模型&#xff0c;而在这篇文章中荔枝将会比较详细地梳理有关JVM学习的另一大重点——GC垃圾回收机制的相关知识&#xff0c;重点了解的比如对象可达性的判断、四种回收…...

Centos7.6 + Apache Ranger 2.4.0编译(docker方式)

目录 一、Ranger简介 1、组件列表 2、支持的数据引擎服务 二、主机环境准备 1、关闭防火墙 2、关闭SELINUX 3、安装docker 4、下载Ranger源码包 5、下载Maven安装包 三、编译Ranger源码 1、修改官方包中的build_ranger_using_docker.sh 2、运行脚本编译 3、编译检…...

LVS-DR模式集群配置

四台虚拟机 node1&#xff1a;128 node2&#xff1a;135 RS端&#xff1a; node3&#xff1a;130 node4&#xff1a;132 [rootnode2 ~]# yum install -y ipvsadm #配置LVS虚拟IP&#xff0c;没有ifconfig命令则先安装 [rootnode2 ~]# yum install net-tools -y #配置VIP [root…...

【数据分析】pandas( 二)

目录 简介&#xff1a; 一&#xff0c;1.1来自Series字典或字典 1.2 来自ndarray或者列表的字典&#xff1a; 1.3来自结构化或记录数组; 1.4来自字典列表&#xff1a; 1.4来自元组的字典&#xff1a; 1.5 来自Series 二&#xff0c;代替构造函数&#xff1a; 2.1DataFram…...

ffmpeg工具实用命令

说明&#xff1a;ffmpeg是一款非常好用的媒体操作工具&#xff0c;包含了许多对于视频、音频的操作&#xff0c;有些视频播放器里面实际上就是使用了ffmpeg。本文介绍ffmpeg的使用以及一些较为实用的命令。 安装 ffmpeg是命令行操作的&#xff0c;不需要安装&#xff0c;可在…...

zabbix API笔记

博客园原文 python简单demo 输出id为111主机的主机群组信息 import requests import json request_headers {"Content-Type": "application/json"} zabbix_url "http://xxx.xxx.xxx.xxx:8080/zabbix/api_jsonrpc.php" get_hostgroup_from_h…...

[HDLBits] Mt2015 q4a

Module A is supposed to implement the function z (x^y) & x. Implement this module. module top_module (input x, input y, output z);assign z(x^y)&x; endmodule...

HarmonyOS NEXT,生命之树初长成

在不同的神话体系中&#xff0c;都有着关于生命之树的记载。 比如在北欧神话中&#xff0c;一株巨大的树木联结着九大世界&#xff0c;其被称为“尤克特拉希尔”Yggdrasill。在中国的《山海经》中&#xff0c;也有着“建木”的传说&#xff0c;它“有九欘&#xff0c;下有九枸&…...

PHPstudy配置伪静态步骤,tp5.1的框架

搜索mod_rewrite.so&#xff0c;然后去掉前面的#&#xff08;即放开注释&#xff09; 2.找到index.php 同级文件.htaccess&#xff08;没有就新建&#xff09; 这些是tp5.1自带的内容&#xff0c;把它注释掉&#xff0c;是错误的内容&#xff0c;添加下面的这段配置 #<If…...

LeetCode:Hot100的python版本

94. 二叉树的中序遍历...

rv1126更新rknpu驱动教学

测试平台&#xff1a;易佰纳rv1126 38板 查看板端版本-------------------------------------------------- 1&#xff1a;查看npu驱动版本 dmesg | grep -i galcore&#xff0c;可以看到版本为6.4.3.5 2&#xff1a;查看rknn-server版本 strings /usr/bin/rknn_server | g…...

[机器学习]线性回归模型

线性回归 线性回归&#xff1a;根据数据&#xff0c;确定两种或两种以上变量间相互依赖的定量关系 函数表达式&#xff1a; y f ( x 1 , x 2 . . . x n ) y f(x_1,x_2...x_n) yf(x1​,x2​...xn​) ​ 回归根据变量数分为一元回归[ y f ( x ) yf(x) yf(x)]和多元回归[ y …...

Vue基于php医院预约挂号系统_6nrhh

随着信息时代的来临&#xff0c;过去的管理方式缺点逐渐暴露&#xff0c;对过去的医院预约挂号管理方式的缺点进行分析&#xff0c;采取计算机方式构建医院预约挂号系统。本文通过阅读相关文献&#xff0c;研究国内外相关技术&#xff0c;开发并设计一款医院预约挂号系统的构建…...

2023-08-07力扣今日六题-不错题

链接&#xff1a; 剑指 Offer 04. 二维数组中的查找 题意&#xff1a; 一个二维矩阵数组&#xff0c;在行上非递减&#xff0c;列上也非递减 解&#xff1a; 虽然在行列上非递减&#xff0c;但是整体并不有序&#xff0c;第一行存在大于第二行的数字&#xff0c;第一列存在…...

Elasticsearch搜索出现NAN异常

原因分析 Elasticsearch默认的打分&#xff0c;一般是不会出现异常的之所以会出现NAN异常&#xff0c;往往是因为我们重新计算了打分&#xff0c;使用了function_score核心原因是在function_score中&#xff0c;出现了计算异常&#xff0c;比如 0/0,比如log1p(x),x为负数等 真…...

(杭电多校)2023“钉耙编程”中国大学生算法设计超级联赛(6)

1001 Count 当k在区间(1n)/2的左边时,如图,[1,k]和[n-k1,n]完全相同,所以就m^(n-k) 当k在区间(1n)/2的右边时,如图,[1,n-k1]和[k,n]完全相同,所以也是m^(n-k) 别忘了特判,当k等于n时,n-k为0,然后a1a1,a2a2,..anan,所以没什么限制,那么就是m^n AC代码&#xff1a; #includ…...

【JavaScript 】浏览器事件处理

1. 什么是浏览器事件? 浏览器事件是指在网页中发生的各种交互和动作,例如用户点击按钮、页面加载完成、输入框文本变化等。通过处理这些事件,可以编写相应的JavaScript代码来实现特定的功能和行为。 2. 常见的浏览器事件 以下是一些常见的浏览器事件及其用途的详细介绍: c…...

(力扣)用两个队列实现栈---C语言

分享一首歌曲吧&#xff0c;希望在枯燥的刷题生活中带给你希望和勇气&#xff0c;加油&#xff01; 题目&#xff1a; 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#…...

使用 RediSearch 在 Redis 中进行全文检索

原文链接&#xff1a; 使用 RediSearch 在 Redis 中进行全文检索 Redis 大家肯定都不陌生了&#xff0c;作为一种快速、高性能的键值存储数据库&#xff0c;广泛应用于缓存、队列、会话存储等方面。 然而&#xff0c;Redis 在原生状态下并不支持全文检索功能&#xff0c;这使…...

[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

1.今天开发了一套服务程序&#xff0c;使用的是Odbc连接MySql数据库&#xff0c; 在我本机用VS打开程序时&#xff0c;访问一切正常&#xff0c;当发布出来装在电脑上&#xff0c;连接数据库时提示&#xff1a; [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定…...

springboot生成表结构和表数据sql

需求 业务背景是需要某单机程序需要把正在进行的任务导出&#xff0c;然后另一台电脑上单机继续运行&#xff0c;我这里选择的方案是同步SQL形式&#xff0c;并保证ID随机&#xff0c;多个数据库不会重复。 实现 package com.nari.web.controller.demo.controller;import cn…...

供应链管理五大内容/杭州网站seo

对用户发送的信息加密是否会成为大势所趋&#xff1f;进行信息加密是隐私强调者和阴谋论者一直以来的主张。 雅虎公司(Yahoo! Inc., YHOO)周四表示&#xff0c;将加入竞争对手谷歌(Google Inc., GOOG)的行列明年打造出一个安全邮件系统&#xff0c;有了这个安全邮件系统&#x…...

那个网站可以免费做风面/百度推广四川成都地区服务中心

摘要&#xff1a;在前一篇文章中我们并没有考虑配置的组件参数是什么类型&#xff0c;也没有在配置文件中指定过类型&#xff0c;那么Castle IOC是如何进行类型转换的&#xff1f;如何配置一些复杂的数据类型&#xff1f;如果有自定义的类型如何去进行类型转换&#xff1f;本文…...

河南企业网站建设/百度企业查询

华为荣耀4C从EMUI3.0安卓4.4升级到4.0 安卓版本升级到6.0&#xff0c;荣耀畅玩4C—升级教程。测试型号是CHM-TL00H &#xff0c;原系统版本是 EMUI系统3.0.安卓4.4&#xff0c;因为新版的微信以及其他APP很多都要求安卓5.0以上了&#xff0c;所以查询了网上的方法将老的华为荣耀…...

wordpress下载网页/20个排版漂亮的网页设计

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】将字符串生成艺术字pyfiglet.figlet_format选择题以下关于python代码表述错误的一项是?import pyfigletmyText"python"print("【执行】pyfiglet.figlet_format")resultpyf…...

怎么建设网站赚钱手机/怎么百度推广

新建信息布局&#xff1a;自动出来的是系统的组件&#xff0c;里面是listview&#xff0c;写ontextchanglis也行<LinearLayout xmlns:android"http://schemas.android.com/apk/res/android" android:layout_width"match_parent" android:layout_height&…...

网站建设商城/独立站建站需要多少钱

做了这么多年的数据分析和挖掘工作&#xff0c;一直都在思考一个问题&#xff0c;“互联网和金融&#xff0c;在数据挖掘上到底存在什么样的区别”。在对这个问题的摸索和理解过程中&#xff0c;发现数据挖掘本身包含很多层次。模型本身也是存在传统和时髦之分的。本文就想聊聊…...