JavaScript学习笔记(十三):网络请求JS AJAX
1、AJAX - XMLHttpRequest 对象
1.1 XMLHttpRequest
对象是 AJAX
的基石。
- 创建
XMLHttpRequest
对象 - 定义回调函数
- 打开
XMLHttpRequest
对象 - 向服务器发送请求
1.2 XMLHttpRequest 对象
所有现代浏览器都支持 XMLHttpRequest
对象。
XMLHttpRequest
对象可用于在后台与 Web
服务器交换数据。这意味着可以更新网页的部分内容,而无需重新加载整个页面。
1.3 创建 XMLHttpRequest 对象
所有现代浏览器(Chrome、Firefox、IE、Edge、Safari、Opera)都有内置的 XMLHttpRequest
对象。
创建 XMLHttpRequest
对象的语法:
variable = new XMLHttpRequest();
1.4 定义回调函数
回调函数是作为参数传递给另一个函数的函数。
在这种情况下,回调函数应包含响应准备就绪时要执行的代码。
xhttp.onload = function() {// 当响应准备就绪时要做什么
}
1.5 发送请求
如需向服务器发送请求,您可以使用 XMLHttpRequest 对象的 open() 和 send() 方法:
xhttp.open("GET", "ajax_info.txt");
xhttp.send();
示例:
<!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>Document</title></head><body><button onclick="myFunction()">更改内容</button><p id="demo">内容</p><!-- 请确保替换path/to/your/file.txt为你的txt文件的实际路径。
如果你在客户端浏览器中尝试这个代码,它将不会工作,因为出于安全原因,
现代浏览器不允许通过XMLHttpRequest或fetch直接访问本地文件系统。
如果你需要在客户端操作文件,你可能需要使用HTML的<input type="file">元素允许用户
选择文件,然后使用FileReader API来读取文件内容。 --><script>function myFunction() {const xhttp = new XMLHttpRequest();xhttp.open("GET", "/text/demo.txt");xhttp.responseText = "text";xhttp.onload = function () {document.getElementById("demo").innerHTML = xhttp.responseText;};xhttp.send();}</script></body>
</html>
1.6 跨域访问(Access Across Domains)
出于安全原因,现代浏览器不允许跨域访问。
这意味着网页和它尝试加载的 XML 文件必须位于同一台服务器上。
W3School 上的例子都打开位于 W3School 域中的 XML 文件。
如果您想在自己的网页之一上使用上面的例子,您加载的 XML 文件必须位于您自己的服务器上。
1.7 XMLHttpRequest 对象方法
1.8 XMLHttpRequest 对象属性
1.8.1 onload 属性
使用 XMLHttpRequest
对象时,您可以定义一个回调函数,以便在请求收到答复时执行。
请在 XMLHttpRequest
对象的 onload
属性中定义该函数:
实例见1.5
1.8.2 多个回调函数
如果网站中有多个 AJAX
任务,则应创建一个执行 XMLHttpRequest
对象的函数,并为每个 AJAX
任务创建一个回调函数。
函数调用应包含 URL
以及响应准备就绪时要调用的函数。
实例:
loadDoc("url-1", myFunction1);loadDoc("url-2", myFunction2);function loadDoc(url, cFunction) {const xhttp = new XMLHttpRequest();xhttp.onload = function() {cFunction(this);}xhttp.open("GET", url);xhttp.send();
}function myFunction1(xhttp) {// 这里是动作
}
function myFunction2(xhttp) {// 这里是动作
}
1.8.3 onreadystatechange 属性
readyState
属性保存 XMLHttpRequest
的状态。
onreadystatechange
属性定义了一个回调函数,当 readyState
改变时执行该函数。
status
属性和 statusText
属性保存 XMLHttpRequest
对象的状态。
每次 readyState 改变时都会调用 onreadystatechange 函数。
当 readyState 为 4 且 status 为 200 时,响应就绪:
<!DOCTYPE html>
<html>
<body><div id="demo">
<h1>XMLHttpRequest 对象</h1>
<button type="button" onclick="loadDoc()">更改内容</button>
</div><script>
function loadDoc() {const xhttp = new XMLHttpRequest();xhttp.onreadystatechange = function() {if (this.readyState == 4 && this.status == 200) {document.getElementById("demo").innerHTML =this.responseText;}};xhttp.open("GET", "/demo/js/ajax_info.txt");xhttp.send();
}
</script></body>
</html>
onreadystatechange 事件被触发了四次(1-4),每次 readyState 变化一次。
2、AJAX - XMLHttpRequest
XMLHttpRequest
对象用于同服务器交换数据。
2.1 向服务器发送请求
如需向服务器发送请求,我们使用 XMLHttpRequest 对象的 open() 和 send() 方法:
xhttp.open("GET", "ajax_info.txt", true);
xhttp.send();
2.2 GET 还是 POST?
GET
比 POST
更简单更快,可用于大多数情况下。
不过,请在以下情况始终使用 POST
:
- 缓存文件不是选项(更新服务器上的文件或数据库)
- 向服务器发送大量数据(
POST
无大小限制) - 发送用户输入(可包含未知字符),
POST
比GET
更强大更安全
2.3 GET 请求
一条简单的 GET 请求:
xhttp.open("GET", "demo_get.asp", true);
xhttp.send();
在上面的例子中,您可能会获得一个缓存的结果。为了避免此情况,请向 URL 添加一个唯一的 ID:
xhttp.open("GET", "demo_get.asp?t=" + Math.random(), true);
xhttp.send();
如果您需要用 GET 方法来发送信息,请向 URL 添加这些信息:
xhttp.open("GET", "demo_get2.asp?fname=Bill&lname=Gates", true);
xhttp.send();
2.4 POST 请求
一条简单的 POST 请求:
xhttp.open("POST", "demo_post.asp", true);
xhttp.send();
如需像 HTML 表单那样 POST 数据,请通过 setRequestHeader() 添加一个 HTTP 头部。请在 send() 方法中规定您需要发送的数据:
xhttp.open("POST", "ajax_test.asp", true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send("fname=Bill&lname=Gates");
2.5 url - 服务器上的文件
open()
方法的 url
参数,是服务器上文件的地址:
xhttp.open("GET", "ajax_test.asp", true);
该文件可以是任何类型的文件,如 .txt
和 .xml
,或服务器脚本文件,如 .asp
和 .php
(它们可以在发送回响应之前在服务器执行操作)。
2.6 异步 - true 还是 false?
如需异步发送请求,open() 方法的 async 参数必须设置为 true:
xhttp.open("GET", "ajax_test.asp", true);
发送异步请求对 web 开发人员来说是一个巨大的进步。服务器上执行的许多任务都非常耗时。在 AJAX 之前,此操作可能会导致应用程序挂起或停止。
通过异步发送,JavaScript 不必等待服务器响应,而是可以:
- 在等待服务器响应时执行其他脚本
- 当响应就绪时处理响应
2.7 onreadystatechange 属性
通过 XMLHttpRequest
对象,您可以定义当请求接收到应答时所执行的函数。
这个函数是在 XMLHttpResponse
对象的 onreadystatechange
属性中定义的:
<!DOCTYPE html>
<html>
<body><div id="demo">
<h1>XMLHttpRequest 对象</h1>
<button type="button" onclick="loadDoc()">更改内容</button>
</div><script>
function loadDoc() {var xhttp = new XMLHttpRequest();xhttp.onreadystatechange = function() {if (this.readyState == 4 && this.status == 200) {document.getElementById("demo").innerHTML =this.responseText;}};xhttp.open("GET", "/demo/js/ajax_info.txt", true);xhttp.send();
}
</script></body>
</html>
2.8 同步请求
如需执行同步的请求,请把 open()
方法中的第三个参数设置为 false
:
xhttp.open("GET", "ajax_info.txt", false);
有时 async = false
用于快速测试。你也会在更老的 JavaScript 代码中看到同步请求。
由于代码将等待服务器完成,所以不需要 onreadystatechange
函数:
<!DOCTYPE html>
<html>
<body><h1>XMLHttpRequest 对象</h1><p id="demo">让 AJAX 更改这段文本。</p><button type="button" onclick="loadDoc()">更改内容</button><script>
function loadDoc() {var xhttp = new XMLHttpRequest();xhttp.open("GET", "/demo/js/ajax_info.txt", false);xhttp.send();document.getElementById("demo").innerHTML = xhttp.responseText;
}
</script></body>
</html>
我们不推荐同步的 XMLHttpRequest (async = false)
,因为 JavaScript 将停止执行直到服务器响应就绪。如果服务器繁忙或缓慢,应用程序将挂起或停止。
同步 XMLHttpRequest
正在从 Web 标准中移除,但是这个过程可能需要很多年。
现代开发工具被鼓励对使用同步请求做出警告,并且当这种情况发生时,可能会抛出 InvalidAccessError
异常。
3、AJAX - 服务器响应
3.1 onreadystatechange 属性
readyState
属性存留 XMLHttpRequest
的状态。
onreadystatechange
属性定义当 readyState
发生变化时执行的函数。
status
属性和 statusText
属性存有 XMLHttpRequest
对象的状态。
每当 readyState 发生变化时就会调用 onreadystatechange 函数。
更多信息:
AJAX - 服务器响应
AJAX XML 实例
AJAX PHP 实例
AJAX ASP 实例
AJAX Database 实例
XML 应用程序
AJAX 实例
相关文章:

JavaScript学习笔记(十三):网络请求JS AJAX
1、AJAX - XMLHttpRequest 对象 1.1 XMLHttpRequest 对象是 AJAX 的基石。 创建 XMLHttpRequest 对象定义回调函数打开 XMLHttpRequest 对象向服务器发送请求 1.2 XMLHttpRequest 对象 所有现代浏览器都支持 XMLHttpRequest 对象。 XMLHttpRequest 对象可用于在后台与 Web…...
go for 循环变量的使用及易错点
1,for 循环变量,整个for循环中变量i始终使用一个变量,i地址不变,存放的内容在变 func main() {for i : 0; i < 10; i {fmt.Printf("值:%v 地址:%v \n", i, &i)} } 打印: 值:0 地址&am…...
2024嵌入式面试:OPPO嵌入式面试题及参考答案
目录 TCP 与 UDP 的区别是什么? 请简述 TCP 的三次握手过程。 HTTP 协议的工作原理是什么? C++11 引入了哪些新特性? 什么是智能指针?如何解决其内存泄漏问题? 进程间有哪些通信方式? CPU 的调度策略有哪些? 如何保证线程安全?多线程编程需要注意哪些问题? S…...

Cesium模型制作,解决Cesium加载glb/GLTF显示太黑不在中心等问题
Cesium模型制作,解决Cesium加载glb/GLTF显示太黑不在中心等问题 QQ可以联系这里,谢谢...

Java 操作 Redis和redis持久化
一、Jedis 我们要使用 Java 来操作 Redis,Jedis 是 Redis 官方推荐的 java连接开发工具! 使用Java 操作 Redis 中间件! 1.导入对应的依赖 https://mvnrepository.com/artifact/redis.clients/jedis <dependency><groupId>redi…...
Expo创建的React Native项目如何在Windows上进行打包
文章目录 前言eas打包步骤什么是AAB转换为apk文件 本地打包以Windows为例先安装docker,然后手动创建下面的三个文件构建 前言 下面是Expo如何在本地进行打包的过程(windows) eas打包 如果使用云打包,花费时间较多,时…...
探索Go语言中的结构体:定义和使用
引言 Go语言是一种静态类型的编程语言,它提供了多种数据结构来组织数据。结构体(struct)是Go中一种强大的自定义数据类型,允许你将多个不同或相同类型的字段组合成一个单一的实体。本文将介绍Go语言中结构体的基本概念、定义方法…...

Unity Dots学习 (一)
先学习怎么使用,再研究底层代码。Dots大家都有所耳闻。一直没时间研究,最近研究一下 看上图可知,哪怕是CPU的第三级缓存也比内存要快2-5倍。 资料: 《DOTS之路》第零节——前导课(1)——DOTS的5W1H问题_哔哩哔哩_bilibili 《DOT…...

C语言刷题日记(附详解)(1)
一、选择判断部分 第一题: 如下代码是否存在风险,并说明原因和修改方案 #include<stdio.h> int main() {char* str "hello world";*str a;return 0; }思路提示:这种形式的字符串存储在什么区域呢?是否真的有…...

SpringSecurity实现登录功能实战!!!
实现思路 登录 ①自定义登录接口 调用ProviderManager的方法进行认证 如果认证通过生成jwt 把用户信息存入redis中 ②自定义UserDetailsService 在这个实现类中去查询数据库 注意配置passwordEncoder为BCryptPasswordEncoder 退出登录,删除redis中的数…...
mysql中用一个查询获取多个数据库(模式)和表的计数之和
问题 下面的查询返回了4排数据,这很好。但我同时需要对同一个查询中的所有计数求和。这如何实现?我已经尝试了多种不同的方法,但只得到sintax报错。 SELECT COUNT(*) FROM schema1.table WHERE STATE 17 AND LEVEL 1 UNION ALL SELECT CO…...
linux patch 的制作方式
文章目录 制作patch1. 准备工作2. 使用 diff 命令生成补丁文件生成单个文件的补丁生成整个目录的补丁 3. 检查补丁文件 使用patch1. 应用补丁文件1.1 应用单个文件的补丁1.2 应用整个目录的补丁 总结示例:制作和应用补丁 前言: 在Linux系统中,…...
白骑士的C#教学进阶篇 2.4 LINQ查询
系列目录 上一篇:白骑士的C#教学进阶篇 2.3 委托与事件 LINQ(Language Integrated Query)是C#中的一个强大特性,它提供了统一的语法来查询和操作各种数据源,如数组、集合、XML和数据库等。LINQ通过一种类似SQL的查询语…...
2024华为OD机试真题- 贪吃的猴子Python-C卷D卷-200分
目录 题目描述 输入描述 输出描述 用例1 用例2 用例3 解题思路 代码 2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++) 题目描述 一只贪吃的猴子,来到一个果园,发现许多串香蕉排成一行,每串香蕉上有若干根香蕉。每串香蕉的根数由数组numbers给出。 猴子获取香蕉,…...

4-1-2 直流电机(电机专项教程)
4-1-2 直流电机(电机专项教程) 4-1-2 直流电机主要参数尺寸参数额定电压额定电流空载转速 如何控制直流电机有刷直流电机转向控制H桥电路控制转向 如何控制电机转速PWM控制电机转速 4-1-2 直流电机 之前学习了有刷直流电机的基本结构个工作原理ÿ…...

[图解]用例规约之扩展路径
1 00:00:01,710 --> 00:00:03,670 基本路径写完之后 2 00:00:04,690 --> 00:00:07,270 接下来就是扩展路径 3 00:00:08,620 --> 00:00:14,000 扩展路径就是系统要处理的意外和分支 4 00:00:14,010 --> 00:00:19,710 系统要处理的 5 00:00:20,970 --> 00:00:…...
学习记录第二十八天
有名管道(FIFO) 在Linux系统中,有名管道是一种特殊类型的文件,它允许不相关的进程之间进行通信。有名管道在文件系统中有一个具体的路径和名称,因此它们可以被多个进程共同访问。有名管道的特点包括持久性、多进程访问…...

SpringBoot的事务/调度/缓存/邮件发送和一些Spring知识点总结
目录 1、SpringBoot的事务管理 2、SpringBoot的异步任务 3、SpringBoot定时任务调度 4、SpringBoot整合Mail发送邮件 5、Spring框架中的Bean的作用域 6、Spring框架中的Bean的线程安全 7、 Spring框架中的Bean生命周期 8、Spring框架如何解决循环依赖? 9、…...
透明加密技术
透明加密技术,也被称为透明数据加密(Transparent Data Encryption, TDE),是一种加密方法,它允许数据在存储时自动加密和解密,而不需要用户进行任何手动操作。透明加密技术主要应用于数据库、文件系统和磁盘…...

深入理解Faiss:高效向量检索的利器
近年来,随着人工智能和机器学习技术的飞速发展,向量检索技术变得越来越重要。无论是在推荐系统、图像搜索还是自然语言处理等领域,向量检索都扮演着至关重要的角色。而在众多向量检索库中,Faiss(Facebook AI Similarit…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...

Mac flutter环境搭建
一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...

SQL注入篇-sqlmap的配置和使用
在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap,但是由于很多朋友看不了解命令行格式,所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习,链接:https://wwhc.lanzoue.com/ifJY32ybh6vc…...