Ajax学习笔记,第一节:语法基础
Ajax学习笔记,第一节:语法基础
一、概念
1、什么是Ajax
使用浏览器的 XMLHttpRequest 对象 与服务器通信
2、什么是axios
Axios是一个基于Promise的JavaScript库,支持在浏览器和Node.js环境中使用。相较于Ajax,Axios提供了更多的功能,如拦截请求和响应、转换请求和响应数据、取消请求等,
这使得开发者能够更方便地处理和管理HTTP请求。Axios相较于Ajax兼容性更好,支持现代浏览器,而Ajax在一些旧版本浏览器中可能会出现一些兼容性问题。在安全性方面,Axios支持防御XSRF(跨站请求伪造),而Ajax本身并不直接支持这一防御机制。
3、认识URL
·URL的组成:协议,域名,资源路径
(URL 组成有很多部分,我们先掌握这3个重要的部分即可)
·http协议,超文本传输协议。规定了浏览器和服务器传递数据的格式·域名,标记服务器在互联网当中的方位,网络中有很多服务器,你想访问哪一台,就需要知道它的域名。·资源路径,一个服务器内有多个资源,用于标识你要访问的资源具体的位置
4、准备
https://www.apifox.cn/apidoc/project-1937884
这里 有 现成的后端服务,我们在练习时直接使用即可
二、Axios使用
1、初步使用
1> 引入 axios.js 文件到自己的网页中https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js2> 语法:axios({url: '请求路径',method: '请求方法',data:{参数名:值}}).then((res)=>{//对服务器返回的数据做处理});
<body><h3>1、省份列表</h3><p class="my-provs"></p><h3>新闻列表</h3><p class="my-news"></p><script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><script>axios({url: "https://hmajax.itheima.net/api/province"}).then((res) => {console.log(res);if (res != undefined) {let provList = res.data.list;document.querySelector(".my-provs").innerHTML = provList.join("<br>");}});axios({url: "https://hmajax.itheima.net/api/news"}).then((res) => {console.log(res);if (res != undefined) {let newsList = res.data.data;let newsInnerHtml = "";newsList.forEach(ele => {newsInnerHtml = newsInnerHtml + " <a>" + ele.title + "</a><br><img src=" + ele.img + "><br/> ";});console.log(newsInnerHtml);document.querySelector(".my-news").innerHTML = newsInnerHtml;}})</script>
</body>
2、携带查询参数
语法:
axios({url:"请求路径",params:{//查询参数 params 或在URL后拼接成?xxx=yyy&ooo=ddd格式}
}).then((res)=>{//结果处理
});//注意:
参数中 当属性名和value位置变量名同名即可简写
<body><h3>城市列表:</h3> <input type="text" name="cityname"><input type="button" class="slt-btn" value="点我"><p class="my-city"></p><script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><script>let cliBtn = document.querySelector(".slt-btn");cliBtn.addEventListener('click', () => {let inputVal = document.querySelector("input[name='cityname']");axios({url: "https://hmajax.itheima.net/api/city",params: {"pname": inputVal.value}}).then(res => {console.log(res);if (res != undefined) {let cityList = res.data.list;document.querySelector(".my-city").innerHTML = cityList.join("<br/>");}})});</script>
</body>
3、常用请求方法和数据提交
请求方法是一些固定单词的英文,例如:GET,POST,PUT,DELETE,PATCH
(这些都是http协议规定的),每个单词对应一种对服务器资源要执行的操作axios内部设置了默认请求方法就是GET
请求方法 | 操作 |
---|---|
GET | 获取数据 |
POST | 数据提交 |
PUT | 修改数据(全部) |
DELETE | 删除数据 |
PATCH | 修改数据(部分) |
#语法:
axios({url: '目标资源地址',method: '请求方法',data: { //注意这里是data 而不是 params参数名: 值}
}).then(result => {// 对服务器返回的数据做后续处理
})
<body><label for="un">用户名:</label><input type="text" name="username" id="un"><label for="pwd">密码:</label><input type="password" name="password" id="pwd"><input type="button" value="注册" class="btn"><script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><script>let submitBtn = document.querySelector(".btn");submitBtn.addEventListener('click', () => {let username = document.querySelector("#un").value;let password = document.querySelector("#pwd").value;if (username != undefined && password != undefined) {axios({url: "https://hmajax.itheima.net/api/register",method: 'POST',data: { //注意这里是data 不是 paramsusername,password}}).then(res => {console.log(res.data);if (res.data == undefined) {alert("注册失败");return;}if (res.data.code == '10000') {alert("账号注册成功");} else {alert(res.data.message);}});} else {alert("请输入用户名和密码");}});</script>
</body>
4、Axios错误处理
##语法:
axios({// ...请求选项
}).then(result => {// 处理成功数据
}).catch(error => {// 处理失败错误
})
<script>let submitBtn = document.querySelector(".btn");submitBtn.addEventListener('click', () => {let username = document.querySelector("#un").value;let password = document.querySelector("#pwd").value;if (username != undefined && password != undefined) {axios({url: "https://hmajax.itheima.net/api/register",method: 'POST',data: { //注意这里是data 不是 paramsusername,password}}).then(res => {console.log(res.data);if (res.data == undefined) {alert("注册失败");return;}if (res.data.code == '10000') {alert("账号注册成功");} else {alert(res.data.message);}}).catch(error => {console.log(error.message);console.log(error.response.data);console.log(error.response.data.message);alert(error.response.data.message);});} else {alert("请输入用户名和密码");}});</script>
5、form-serialize插件
我们前面收集表单元素的值,是一个个标签获取的
如果一套表单里有很多很多表单元素,如何一次性快速收集出来呢.
使用 form-serialize 插件提供的 serialize 函数就可以办到语法:
serialize(参数1,参数2)参数1:要获取的form表单标签对象,要求表单元素需要有name属性,用来作为收集的数据中属性名
参数2:配置对象hash:true==>收集出来是一个JS对象结构false==>收集出来是一个查询对象格式empty:true==>收集空值false==>不收集空值
<body><form action="javascript:;" class="my-form"><input type="text" name="username"><br><input type="text" name="password"><br><input type="button" class="btn" value="提交"></form><script src="./js/form-serialize.js"></script><script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><script>let btn = document.querySelector(".btn");btn.addEventListener('click', () => {let myForm = document.querySelector(".my-form");const data = serialize(myForm, { hash: true, empty: false });const { username, password } = data;axios({url: "https://hmajax.itheima.net/api/login",method: "POST",data: {username,password}}).then(res => {alert(res.data.message);})})</script>
</body>
三、Ajax原理解析
1、XMLHttpRequest 简单请求
·AJAX 是浏览器与服务器通信的技术,采用 XMLHttpRequest 对象相关代码
·axios 是对 XHR 相关代码进行了封装,让我们只关心传递的接口参数#语法:
const xhr = new XMLHttpRequest()
xhr.open('请求方法', '请求url网址')
xhr.addEventListener('loadend', () => {// 响应结果console.log(xhr.response)
})
xhr.send()
<h3>省份</h3>
<p class="my_prov"></p>
<script>//==================1、通过XMLHttpRequest实现查询省份的接口=====================//1-1、创建xhr对象const xhr = new XMLHttpRequest();//1-2、设置请求路径和方式xhr.open("GET", "http://hmajax.itheima.net/api/province");//1-3、监听回调xhr.addEventListener("loadend", () => {console.log(xhr.response);//JSON解析let res = JSON.parse(xhr.response);console.log(res);const my_prov = document.querySelector(".my_prov");my_prov.innerHTML = res.list.join("<br>")});//监听loadend事件//1-4、发送请求xhr.send();//发送请求
</script>
##拓展:
进度事件的种类:
进度事件用来描述资源加载的进度,主要由 AJAX 请求<img>、<audio>、<video>、<style>、<link>
等外部资源的加载触发,继承了ProgressEvent接口。它主要包含以下几种事件。·abort:外部资源中止加载时(比如用户取消)触发。如果发生错误导致中止,不会触发该事件。
·error:由于错误导致外部资源无法加载时触发。
·load:外部资源加载成功时触发。
·loadstart:外部资源开始加载时触发。
·loadend:外部资源停止加载时触发,发生顺序排在error、abort、load等事件的后面。
·progress:外部资源加载过程中不断触发。
·timeout:加载超时时触发。
2、XMLHttpRequest 请求参数(简单参数)
#实现::http://xxxx.com/xxx/xxx?参数名1=值1&参数名2=值2
const xhr2 = new XMLHttpRequest();
xhr2.open("GET", "http://hmajax.itheima.net/api/city?pname=河北省");
//1-3、监听回调
xhr2.addEventListener("loadend", () => {console.log(xhr2.response);//JSON解析let res = JSON.parse(xhr2.response);console.log(res);const my_city = document.querySelector(".my_city");my_city.innerHTML = res.list.join("<br>")
});//监听loadend事件
//1-4、发送请求
xhr2.send();//发送请求
3、XMLHttpRequest 请求参数(多个)
##语法
let queryParams = new URLSearchParams({"pname": "河北省","cname": "邯郸市"
});
let queryString = queryParams.toStrng();
//================3、通过XMLHttpRequest实现查询区县的接口(多个参数)====================const xhr3 = new XMLHttpRequest();let queryParams = new URLSearchParams({"pname": "河北省","cname": "邯郸市"});xhr3.open("GET", "https://hmajax.itheima.net/api/area?" + queryParams.toString());//1-3、监听回调xhr3.addEventListener("loadend", () => {console.log(xhr3.response);//JSON解析let res = JSON.parse(xhr3.response);console.log(res);const my_area = document.querySelector(".my_area");my_area.innerHTML = res.list.join("<br>")});//监听loadend事件//1-4、发送请求xhr3.send();//发送请求
4、XMLHttpRequest数据提交
##语法:
xhr4.setRequestHeader("Content-Type", "application/json");
let data = { "username": username, "password": password };
let dataStr = JSON.stringify(data);
xhr4.send(dataStr);
const registBtn = document.querySelector(".btn");
registBtn.addEventListener("click", function () {let username = document.querySelector("#un").value;let password = document.querySelector("#pwd").value;if (username == undefined || password == undefined) {alert("请输入用户名和密码");return;}const xhr4 = new XMLHttpRequest();xhr4.open("POST", "https://hmajax.itheima.net/api/register");xhr4.addEventListener("loadend", () => {console.log(xhr4.response);let res = JSON.parse(xhr4.response);if (res != undefined && res.code != '10000') {alert(res.message);} else {alert("账号注册成功.id为:" + res.data.id);}})xhr4.setRequestHeader("Content-Type", "application/json");let data = { "username": username, "password": password };let dataStr = JSON.stringify(data);xhr4.send(dataStr);
});
相关文章:

Ajax学习笔记,第一节:语法基础
Ajax学习笔记,第一节:语法基础 一、概念 1、什么是Ajax 使用浏览器的 XMLHttpRequest 对象 与服务器通信2、什么是axios Axios是一个基于Promise的JavaScript库,支持在浏览器和Node.js环境中使用。相较于Ajax,Axios提供了更多…...

《用Python画蔡徐坤:艺术与编程的结合》
简介 大家好!今天带来一篇有趣的Python编程项目,用代码画出知名偶像蔡徐坤的形象。这个项目使用了Python的turtle库,通过简单的几何图形和精心设计的代码来展示艺术与编程的结合。 以下是完整的代码和效果介绍,快来试试看吧&…...

Unity中动态生成贴图并保存成png图片实现
实现原理: 要生成长x宽y的贴图,就是生成x*y个像素填充到贴图中,如下图: 如果要改变局部颜色,就是从x1到x2(x1<x2),y1到y2(y1<y2)这个范围做处理, 或者要想做圆形就是计算距某个点(x1,y1&…...

Mac配置maven环境及在IDEA中配置Maven
Mac配置maven环境及在IDEA中配置Maven 1. 介绍 Maven是一款广泛用于Java等JVM语言项目的工具,它以项目对象模型(POM)为基础进行项目管理,通过POM文件来定义项目信息和依赖关系。同时,它也是构建自动化工具࿰…...

Reactor 模式的理论与实践
1. 引言 1.1 什么是 Reactor 模式? Reactor 模式是一种用于处理高性能 I/O 的设计模式,专注于通过非阻塞 I/O 和事件驱动机制实现高并发性能。它的核心思想是将 I/O 操作的事件分离出来,通过事件分发器(Reactor)将事…...

vim 一次注释多行 的几种方法
在 Vim 中一次注释多行是一个常见操作。可以使用以下方法根据你的具体需求选择合适的方式: 方法 1:手动插入注释符 进入正常模式: 按 Esc 确保进入正常模式。 选择需要注释的多行: 移动到第一行,按下 Ctrlv 进入可视块…...

问题记录-Java后端
问题记录 目录 问题记录1.多数据源使用事务注意事项?2.mybatis执行MySQL的存储过程?3.springBoot加载不到nacos配置中心的配置问题4.服务器产生大量close_wait情况 1.多数据源使用事务注意事项? 问题:在springBoot项目中多表处理数…...

李春葆《数据结构》-课后习题代码题
一:假设不带权有向图采用邻接矩阵 g 存储,设计实现以下功能的算法: (1)求出图中每个顶点的入度。 代码: void indegree(MatGraph g){int i,j,n;printf("各个顶点的入度:\n");for(i…...

51c~C语言~合集2
我自己的原文哦~ https://blog.51cto.com/whaosoft/12652943 一、嵌入式开发中的C语言编译器 如果你和一个优秀的程序员共事,你会发现他对他使用的工具非常熟悉,就像一个画家了解他的画具一样。----比尔.盖茨1 不能简单的认为是个工具 嵌入式程序开发…...

【Python】构建事件驱动架构:用Python实现实时应用的高效系统
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 事件驱动架构(Event-Driven Architecture,EDA)是一种基于事件流动进行系统设计的模式,广泛应用于游戏开发、实时监控和分布式系统中。它通过解耦事件的生产者和消费者,提升系统的可扩展性和灵活性。本文章从…...

Git(一)基本使用
目录 一、使用git -v 查看安装git版本 二、使用mkdir 创建一个文件,并使用 git init 在该目录下创建一个本地仓库, 三、通过git clone命令接入线上仓库 四、使用git status查看仓库状态信息 五、利用echo写入一个文件 并使用cat进行查看 【Linux】e…...

HarmonyOS应用开发者基础认证,Next版本发布后最新题库(10月8日更新题库未收录)
笔者会尽量找到答案的出处,力求答案准确无误。有些题目答案可能有错,也有一些笔者实在找不到出处,也不知道答案的,如果读者发现错误或有补充建议,欢迎评论或私信笔者。您的每一条反馈都是宝贵的,能够帮助笔…...

【PGCCC】Postgresql BRIN 索引原理
前言 postgresql 提供了块级索引(简称 BRIN),主要适用于类似时序数据之类的,有着天然的顺序,而且都是添加写的场景。相比于 btree 索引,它的体积小得多,非常适用于大数据量的场景。 原理 pos…...

腾讯云 AI 代码助手:产品研发过程的思考和方法论
一、文章摘要 本文将详细阐述 腾讯云 AI 代码助手的历史发展形态与产品整体架构,并从技术、研发方法论的角度分别阐述了产品的研发过程。 全文阅读约 5~8 分钟。 二、产品布局 AI 代码助手产品经历了三个时代的发展 第一代诸如 Eclipse、Jetbrains、V…...

Matlab 深度学习 PINN测试与学习
PINN 与传统神经网络的区别 与传统神经网络的不同之处在于,PINN 能够以微分方程形式纳入有关问题的先验专业知识。这些附加信息使 PINN 能够在给定的测量数据之外作出更准确的预测。此外,额外的物理知识还能在存在含噪测量数据的情况下对预测解进行正则…...

【Angular】async详解
在 Angular 中,async 关键字用于定义异步函数,通常与 await 一起使用来处理 Promise。这使得异步代码看起来更像同步代码,从而更容易理解和维护。 基本用法 定义异步函数:使用 async 关键字。等待 Promise 解析:使用…...

抖音SEO矩阵系统:开发技术分享
市场环境剖析 短视频SEO矩阵系统是一种策略,旨在通过不同平台上的多个账号建立联系,整合同一品牌下的各平台粉丝流量。该系统通过遵循每个平台的规则和内容要求,输出企业和品牌形象,以矩阵形式增强粉丝基础并提升商业价值。抖音作…...

SpringBoot集成minio,并实现文件上传
SpringBoot集成minio 什么是minioSpringBoot集成minio1、引入minio依赖2、配置Minio相关参数3、在代码里读取自定义的minio配置4、在minio配置类里,注册ConfigurationProperties实现文件上传到minio1、利用SpringMVC实现接口的异常全局处理2、返回文件路径给前端3、返回文件流…...

centos为用户赋予sudo权限
在CentOS系统中,要为用户test赋予sudo权限,你需要按照以下步骤操作: 确保sudo包已安装: 如果系统中没有安装sudo,你可以通过yum(CentOS 7及以下)或dnf(CentOS 8及以上)来…...

SAP 零售方案 CAR 系统的介绍与研究
前言 当今时代,零售业务是充满活力和活力的业务领域之一。每天,由于销售运营和客户行为,它都会生成大量数据。因此,公司迫切需要管理数据并从中检索见解。它将帮助公司朝着正确的方向发展他们的业务。 这就是为什么公司用来处理…...

Android Framework AudioFlinge 面试题及参考答案
目录 请解释什么是 AudioFlinger? AudioFlinger 在 Android 系统中的位置是什么? AudioFlinger 的主要职责有哪些? AudioFlinger 如何管理音频流? 在 AudioFlinger 中,什么是音频会话? 请简述 AudioFlinger 的工作流程。 AudioFlinger 是如何与硬件交互的? 在 A…...

嵌入式系统与单片机工作原理详解
随着现代科技的发展,嵌入式系统已经深入到我们日常生活中的方方面面。无论是智能家居、汽车电子,还是工业控制、医疗设备,都离不开嵌入式系统的支持。而单片机作为嵌入式系统的核心组件,是实现这些功能的关键之一。本文将详细介绍…...

Diving into the STM32 HAL-----Timers笔记
嵌入式设备会按时间执行某些活动。对于真正简单且不准确的延迟,繁忙的循环可以执行任务,但是使用 CPU 内核执行与时间相关的活动从来都不是一个聪明的解决方案。因此,所有微控制器都提供专用的硬件外设:定时器。定时器不仅是时基生…...

对比 MyBatis 批处理 BATCH 模式与 INSERT INTO ... SELECT ... UNION ALL 进行批量插入
前言 在开发中,我们经常需要批量插入大量数据。不同的批量插入方法有不同的优缺点,适用于不同的场景。本文将详细对比两种常见的批量插入方法: MyBatis 的批处理模式。使用 INSERT INTO ... SELECT ... UNION ALL 进行批量插入。 MyBatis …...

AI大模型如何重塑软件开发流程与模式
AI大模型如何重塑软件开发流程与模式 随着人工智能技术的不断发展,AI大模型正在逐步改变软件开发的方式。传统的软件开发流程,尽管经过多年的演进,使得许多企业能够顺利进行软件开发,但仍然面临着许多挑战,例如开发周…...

NUXT3学习日记五(composables、$fetch和useAsyncData、useFetch,lazy,refresh)
composables 在 Nuxt 3 中,composables(组合式函数)是一种用于封装和复用有状态逻辑的机制。它类似于 Vue 3 中的组合式 API,允许你将相关的逻辑(如数据获取、状态管理等)提取到独立的函数中,然…...

MySQL原理简介—10.SQL语句和执行计划
大纲 1.什么是执行计划 2.执行计划包含哪些内容 3.SQL语句和执行计划的总结 4.SQL语句使用多个二级索引 5.多表关联的SQL语句如何执行 6.全表扫描执行计划的成本计算方法 7.索引的成本计算方法 8.MySQL如何优化执行计划 9.explain的参数说明 1.什么是执行计划 (1)什么…...

wordpress二开-WordPress新增页面模板-说说微语
微语说说相当于一个简单的记事本,使用还是比较方便的。这个版本的说说微语CSS样式不兼容,可能有些主题无法适配,但是后台添加内容,前端显示的逻辑已经实现。可以当作Word press二开中自定义页面模板学习~ 一、后台添加说说微语模…...

001 MATLAB介绍
前言: 软件获取渠道有很多,难点也就是百度网盘下载慢; 线上版本每月有时间限制。 01 MATLAB介绍 性质: MATLAB即Matrix Laboratory 矩阵实验室的意思,是功能强大的计算机高级语言, 已广泛应用于各学科研究部门、…...

Linux—进程概念学习-03
目录 Linux—进程学习—31.进程优先级1.1Linux中的进程优先级1.2修改进程优先级—top 2.进程的其他概念3.进程切换4.环境变量4.0环境变量的理解4.1环境变量的基本概念4.2添加环境变量—export4.3Linux中环境变量的由来4.4常见环境变量4.5和环境变量相关的命令4.6通过系统调用获…...