JavaScript学习笔记(十三):网络请求JS AJAX

news2024/11/25 12:58:51

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?

GETPOST 更简单更快,可用于大多数情况下。

不过,请在以下情况始终使用 POST

  • 缓存文件不是选项(更新服务器上的文件或数据库)
  • 向服务器发送大量数据(POST 无大小限制)
  • 发送用户输入(可包含未知字符),POSTGET 更强大更安全

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 实例

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【mysql】MySQL的数据库简单搭建

文章目录 前言基础知识数据库数据表数据表结构记录&#xff08;数据&#xff09; 数据类型数值类型字符串类型日期类型二进制类型其他数据类型 约束where子句其他条件 order by 语句 &#xff08;排序&#xff09;group by语句&#xff08;分组&#xff09; 数据库操作新建数据…

漏洞挖掘 | EDU拿敏感信息的骚思路

1. 寻找资产 在进行edu漏洞挖掘的时候&#xff0c;我们常常遇到统一认证平台&#xff0c;账号是学号&#xff0c;密码是身份证后6位&#xff08;甚至是更复杂的密码&#xff09;&#xff0c;同时找到这两者的几率很小&#xff0c;所以我们把关注点放在微信小程序中&#xff0c…

15 个高难度 Java 面试题及答案

一、企业聘用指南 聘用合适的 Java 开发人员对您的业务至关重要。聘用不当可能会导致代码效率低下、错过最后期限以及团队活力不佳。这就是为什么在聘用候选人之前必须彻底审查每位候选人的原因。这个过程的一部分是在面试 Java 开发人员候选人时提出正确的问题。 通过我们列…

OK-COIN : 总统大选成为比特币牛市的导火索

每一届总统大选&#xff0c;都将带动比特币进入牛市行情&#xff0c;还有三个多月时间&#xff0c;现在比特币经过底部针震荡整理后&#xff0c;形成了坚实的“双针探底”形态&#xff0c;确认比特币底部形成&#xff0c;随后迎来了非常强势的单边趋势性行情机会 &#xff0c;相…

IDEA关键词全局检索-之jar包

正常没有下载到源码的jar包&#xff0c;是无法检索到.class编译文件中内容的 repository本地仓库中&#xff0c;也是没有源码的 《检索步骤》 1、首先&#xff0c;下载源码 - 可以配置maven自动下载所有jar包的源码&#xff08;再同样配置File-NewProjectsSetup-Settingsfor…

CAN总线学习笔记

1 CAN总线简介 CAN&#xff08;Controller Area Network&#xff09;控制器局域网。 2 电平表示 CAN 总线用两根数据线传输数据&#xff0c;使用差分信号。 2.1 显性电平–低电平–逻辑零 当单片机发送逻辑0信号时&#xff0c;CAN转换芯片输出端会输出一个3.5V信号和一个…

【大模型理论篇】GPT系列预训练模型原理讲解

1. 背景简述 GPT的全称是Generative Pre-Trained Transformer&#xff0c;以Transformer为基础模型&#xff08;可以看Transformer的原理解析&#xff09;&#xff0c;先后迭代了GPT-1【1】&#xff0c;GPT-2【2】&#xff0c;GPT-3【3】、GPT3.5(InstructGPT)【10】、GPT4。…

【直播预告】智能机器人赛道技术培训定档8.20

在不远的将来&#xff0c;机器人可能会成为我们日常生活中不可或缺的伙伴&#xff0c;它们在工业生产线上精准操作&#xff0c;在家庭中提供温馨陪伴&#xff0c;甚至在探索未知领域中担当先锋。而现在&#xff0c;正是我们拥抱这一未来&#xff0c;深入了解并掌握智能机器人技…

【一个月备战国赛】按模型算法分类的国内外优秀论文分享

时间一天一天过去&#xff0c;离国赛又更近一步&#xff0c;昨天分享了matlab的算法程序包&#xff0c;但是可能很多小伙伴拿到算法之后&#xff0c;不知道该如何去使用&#xff0c;如何与题目相结合去完成论文的写作&#xff0c;那么这里就需要家人们提高自己文章的阅读量&…

【python与java的区别-序列(字符串、列表、元组)02】

序列都可以进行的操作包括索引&#xff0c;切片&#xff0c;加&#xff0c;乘&#xff0c;检查成员。 一、字符串 1、定义 Java中的字符是单引号&#xff0c;字符串是双引号&#xff1b;Python则是单双都可以&#xff0c;python也可以使用三引号创建多行字符串 shello fre…

kubernetes之HPA和VPA

目录 HPA 服务发布 创建HPA 增加负载 停止产生负载 VPA HPA HPA&#xff08;Horizontal Pod Autoscaling&#xff0c;Pod水平自动伸缩&#xff09;是Kubernetes中的一个核心功能&#xff0c;它允许用户根据当前Pod的资源使用率&#xff08;如CPU、内存等&#xff09;或其…

想知道排名好的自闭症学校有哪些?这里为你解答

在当今社会&#xff0c;自闭症儿童的教育和康复问题备受关注&#xff0c;网络上关于自闭症学校排名的文章层出不穷。然而&#xff0c;家长们在为自己的孩子挑选合适的学校时&#xff0c;切不可盲目依赖这些排名&#xff0c;一定要结合线下实地考察。 那么&#xff0c;一…

ONES 王颖奇:关于 ONES V6 发布的解读

经过近一年的产品研发&#xff0c;ONES 正式发布 V6 版。 结合 ONES 的产品成熟度阶段和近两年的市场变化&#xff0c;ONES V6 为以下几个场景做了能力深耕。 1. 系统兼容和部署方面&#xff0c;软件供应链国产化政策引导趋势明显&#xff0c;在金融等领域要求全栈信创支持。 …

【数据结构-哈希前缀】力扣1590. 使数组和能被 P 整除

给你一个正整数数组 nums&#xff0c;请你移除 最短 子数组&#xff08;可以为 空&#xff09;&#xff0c;使得剩余元素的 和 能被 p 整除。 不允许 将整个数组都移除。 请你返回你需要移除的最短子数组的长度&#xff0c;如果无法满足题目要求&#xff0c;返回 -1 。 子数组…

模型类DTO、PO、VO

项目中有三类模型类:DTO数据传输对象、PO持久化对象&#xff0c;DTO用于接口层向业务层之间传输数据&#xff0c;PO用于业务层与持久层之间传输数据&#xff1b;有些项目还会设置V0对象&#xff0c;V0对象用在前端与接口层之间传输数据&#xff0c;当前端有多个平台且接口存在差…

pr转场预设导入方法怎么操作?

最近很多小伙伴问我一种问题&#xff0c;那就是pr转场预设如何导入&#xff1f;premiere无法导入预设prfpset文件&#xff0c;双击文件导入不行&#xff0c;pr内部点导入文件也不行&#xff0c;显示文件格式不支持&#xff0c;每当遇到这样的问题&#xff0c;同学们都会十分苦恼…

Ubuntu下交叉编译器工具链的安装方法

本篇文章记录Ubuntu下交叉编译器工具链的安装方法。 目录 一、交叉编译器 1、交叉编译器简介 2、获取交叉编译器 3、安装交叉编译器 4、安装相关库 二、结语 一、交叉编译器 1、交叉编译器简介 交叉编译器是一种编译器&#xff0c;它在一种平台上运行&#xff0c;但生成…

爱思唯尔这三个latex模版有什么区别?

这三个模板在大部分内容上是相同的&#xff0c;主要的区别在于它们处理引用和参考文献的方式。这三种模板分别对应不同的文献引用需求&#xff0c;这通常是根据目标期刊的具体要求来决定的&#xff1a; Harvard style&#xff08;elsarticle-template-harv.tex&#xff09;&…

超详细!!!electron-vite-vue开发桌面应用之数据全局状态管理pinia配置(八)

云风网 云风笔记 云风知识库 在这个项目中采用pinia进行全局状态管理 Pinia符合直觉的 Vue.js 状态管理库 ‌Pinia和‌Vuex的主要区别如下&#xff1a; 架构设计 Vuex采用了集中式的架构&#xff0c;将所有的状态存储在一个单一的全局状态树中&#xff0c;通过‌mutations和…

第三届IEEE云计算、大数据应用与软件工程国际学术会议 (IEEE-CBASE 2024,10月11-13)

第三届IEEE云计算、大数据应用与软件工程国际学术会议 ( CBASE 2024 &#xff09;将于2024年10月11—13日在中国杭州举办。 该会议在连续两届成功举办的基础上&#xff0c;本届将由浙江水利水电学院、浙江省自动化学会、浙江省科协智能制造学会联合体主办&#xff0c;浙江水利水…