一篇文章带你熟悉Ajax

news2024/9/24 18:24:05

文章目录

  • 一、AJAX 简介
  • 二、创建 AJAX 的基本步骤
    • 1. 创建 XMLHttpRequest 对象
    • 2.向服务器发送请求
    • 3.服务器响应状态


一、AJAX 简介

☀️AJAX 的英文全称为 Asynchronous JavaScript And XML,Asynchronous 是异步的意思。何为异步呢?在这里异步是指通过 AJAX 向服务器请求数据,在不刷新整个页面的情况下,更新页面上的部分内容。

  • 其工作原理图如下所示:
    在这里插入图片描述

☀️用户在浏览器执行一些操作,通过 AJAX 引擎发送 HTTP 请求到服务器请求数据,请求成功后,由服务器把请求的数据拿给 AJAX 引擎,再由 AJAX 拿给浏览器。AJAX 在这个过程中相当于是服务员,用户点好菜,由服务员把菜单交给厨师,厨师做好菜,由服务员把菜送到用户的餐桌上。

☀️浏览器如果直接向服务器请求数据的话,在请求过程中,你是不能对页面进行其他操作的,这叫同步请求,而把请求数据这个活外包给 AJAX 后,在请求过程中,用户还是可以对页面进行其他操作,这就是我们的异步请求了,也是 AJAX 的核心特点。

二、创建 AJAX 的基本步骤

1. 创建 XMLHttpRequest 对象

  • 在 AJAX 中,XMLHttpRequest 对象是用来与服务器进行数据交换的。其创建如下所示:
var httpRequest = new XMLHttpRequest();
  • 为了保证浏览器的兼容性,我们可以用以下方式来创建。
if (window.XMLHttpRequest) {
  // Mozilla,Safari,IE7+ 等浏览器适用
  httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) {
  // IE 6 或者更老的浏览器适用
  httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}

2.向服务器发送请求

  • 在步骤一中我们已经创建了用于服务器交换数据的 XMLHttpRequest 对象,要向服务器发送请求,我们需要调用该对象中的 open 和 send 方法。

其使用如下:

// 规定发送请求的一些要求
httpRequest.open("method", "url", async);
// 将请求发送到服务器
httpRequest.send();

open 方法中的参数说明如下:

  • method 是请求的类型,常见的有 GET 和 POST。
  • url 是请求的地址。
  • async 是设置同步或者异步请求,其值为布尔类型,当为 true 时,使用异步请求;当为 false 时,使用同步请求,默认为 true。

3.服务器响应状态

  • 我们使用 HTTP 请求数据后,请求是否成功,会反馈给我们相应的请求状态。我们使用 onreadystatechange 去检查响应的状态,当 httpRequest.readyState 为 4 并且 httpRequest.status 等于 200 时,说明数据请求成功,其使用如下:
httpRequest.onreadystatechange = function () {
  if (httpRequest.readyState == 4 && httpRequest.status == 200) {
    // 请求成功执行的代码
  } else {
    // 请求失败执行的代码
  }
};
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>AJAX 的使用</title>
    <script>
      window.onload = function () {
        if (window.XMLHttpRequest) {
          // Mozilla,Safari,IE7+ 等浏览器适用
          var httpRequest = new XMLHttpRequest();
        } else if (window.ActiveXObject) {
          // IE 6 或者更老的浏览器适用
          var httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
        }
        // 规定发送请求的一些要求
        httpRequest.open(
          "GET",
          "https://jsonplaceholder.typicode.com/users",
          true
        );
        // 将请求发送到服务器
        httpRequest.send();
        httpRequest.onreadystatechange = function () {
          console.log(httpRequest.readyState);
          console.log(httpRequest.status);
          if (httpRequest.readyState == 4 && httpRequest.status == 200) {
            // 请求成功执行的代码
            document.getElementById("item").innerHTML = "请求成功";
          } else {
            // 请求失败执行的代码
            document.getElementById("item").innerHTML = "请求失败";
          }
        };
      };
    </script>
  </head>
  <body>
    <div id="item"></div>
  </body>
</html>

☀️在控制台中输出的 200 是 HTTP 的响应状态码,该状态码还有其他取值,感兴趣的可以阅读 HTTP response status codes。而穿插在 200 之后的数字 2、3、4 是 readyState 的值,它的取值有以下几种:

  • 0 代表未初始化请求。
  • 1 代表已与服务器建立连接。
  • 2 代表请求被接受。
  • 3 代表请求中。
  • 4 代表请求完成。

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

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

相关文章

IT运维服务体系的总体架构是什么?

大家好&#xff0c;我是技福的小咖老师。 今天我们来简单介绍一下IT运维服务体系的总体架构。 运维服务体系由运维服务制度、运维服务流程、运维服务组织、运维服务队伍、运维技术服务平台以及运行维护对象六部分组成&#xff0c;涉及制度、人、技术、对象四类因素。制度是规…

每日一题-力扣(leetcode)2368. 受限条件下可到达节点的数目

题目描述 现有一棵由 n 个节点组成的无向树&#xff0c;节点编号从 0 到 n - 1 &#xff0c;共有 n - 1 条边。 给你一个二维整数数组 edges &#xff0c;长度为 n - 1 &#xff0c;其中 edges[i] [ai, bi] 表示树中节点 ai 和 bi 之间存在一条边。另给你一个整数数组 restr…

激光雷达对植被冠层结构和SIF同时探测展望

前言陆表植被在全球碳循环中起着不可替代的作用。但现阶段&#xff0c;人们对气候变化与植被生态理化功能的关系的研究还不够完善。为了提高气候预测以及缓解气候恶化的速率&#xff0c;对植被参数比如&#xff1a;叶面积指数&#xff08;leaf&#xff09;、植被冠层结构&#…

JavaScript JSON序列化和反序列化

文章目录JavaScript JSON序列化和反序列化概述JSON序列化JSON.stringify()仅一个参数使用使用2个参数使用3个参数其他自定义toJson序列化顺序反序列化JSON.parse()仅一个参数使用使用2个参数eval()JavaScript JSON序列化和反序列化 概述 JSON数据在网络传输时存在两种类型&am…

【虹科云展厅】虹科赋能汽车智能化云展厅专题回顾

虹科赋能汽车智能化云展厅 聚焦前沿技术&#xff0c;【虹科赋能汽车智能化云展厅】正式上线&#xff0c;本次云展厅围绕“汽车以太网/TSN、汽车总线、智能网联、电子测试与验证、自动驾驶”等核心话题&#xff0c;为您带来如临展会现场般的讲演与介绍&#xff0c;更有技术工程…

PromQL之选择器和运算符

平台统一监控的介绍和调研直观感受PromQL及其数据类型PromQL之选择器和运算符 PromQL 匹配器 相等匹配器&#xff08;&#xff09; 选择与提供的字符串完全相同的数据 例&#xff1a;筛选出id“G1 Eden Space” 的数据 jvm_memory_used_bytes{id"G1 Eden Space"}…

Elasticsearch高级查询—— 匹配查询文档

目录一、初始化文档数据二、匹配查询文档示例2.1、概述2.2、示例一、初始化文档数据 在 Postman 中&#xff0c;向 ES 服务器发 POST 请求 &#xff1a;http://localhost:9200/user/_doc/1&#xff0c;请求体内容为&#xff1a; {"name":"张三","age&…

知识图谱与神经网络,神经调节知识网络图

1、图立方和知识图谱的区别和联系与区别 图网络&#xff0c;即Natural Graph&#xff0c;是基于世界各实体之间的自然关系表示而得到的图&#xff0c;他们的节点一般是某个特定网络中的实体&#xff08;人、物理机、分子&#xff09;。例如&#xff1a;社交网络、通信网络、蛋…

阿里云-ODPS SQL-日常开发日期、字符、数学运算、聚合函数函数使用技巧

文章目录1、背景2、 数据处理2.1、OLTP与OLAP概念2.2、OLTP与OLAP区别3、日常开发常用函数3.1、日期函数3.2、数学运算函数3.3、字符串处理函数3.4、聚合函数1、背景 数据仓库&#xff0c;是一个面向主题的、集成的、随时间变化的、信息本身相对稳定的数据集合。 数据仓库从Or…

2-Node.js 内置模块

Node.js 内置模块 简介 之前说过&#xff0c;Node.js 中重要的两句话是 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型&#xff0c;使其轻量又高效。 上面两句话&#xff0c;可以使用下面的图片来具体认识。…

【机器学习 - 5】:多元线性回归

文章目录多元线性回归多元线性回归公式推导举例&#xff1a;波士顿房价取特征值RM为例取所有特证为例多元线性回归 多元线性回归方程&#xff1a;特征值为两个或两个以上。 以下是多元线性回归的模型&#xff0c;我们需要求出theta&#xff0c;使得真实值和预测值的差值最小。 …

2023寒假算法集训营1

A. World Final? World Cup! (I) &#xff08;模拟、枚举&#xff09; 题意&#xff1a; 给定一个长度为 10 的01串&#xff0c;表示 A、B 双方的点球情况&#xff0c;1 表示罚进&#xff0c;0 表示罚不进。 A 先手&#xff0c;交替罚点球&#xff0c;各罚五次。 得分多者…

C语言字符串操作函数(库函数)及其实现

库函数 函数介绍及模拟实现 1.1strlen 1.2strcpy 1.3strcat 1.4strcmp 1.5strncpy 1.6strncat 1.7strncmp 1.8strstr 1.9strtok 1.10strerror 1.11memcpy 1.12memmove 1.13memcmp 小结 本章重点&#xff1a; 重点介绍处理字符串和字符串的库函数的使用和注意事项…

剑指offer

剑指 Offer 03. 数组中重复的数字 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0&#xff5e;n-1 的范围内。数组中某些数字是重复的&#xff0c;但不知道有几个数字重复了&#xff0c;也不知道每个数字重复了几次。请找出数组中任意一个重复的数字…

格式化输入

1、golang不同输入语句的区别&#xff1a; 特点ScanScanlnScanf从控制台读取内容SscanSscanlnSscanf从指定字符串中读取内容FscanFscanlnFscanf从文本中读取内容特点在读取内容的时候不会关注换行在读取内容的时候, 遇到换行时结束以格式化的方式读取内容&#xff0c;遇到换行…

C++程序用codeblocks集成开发环境生成的exe文件无法运行情况的解决

C程序用codeblocks集成开发环境生成的exe文件无法运行情况的解决 一般是因为你使用是自带mimgw的Code::Blocks版本&#xff0c;对#include<iostream>支持不完善造成的。 测试代码如下&#xff1a; #include <iostream> using namespace std;int main() {cout <…

测试开发 | 通用 api 封装实战,带你深入理解 PO

image1080434 66.5 KB 在普通的接口自动化测试中&#xff0c;如果接口的参数&#xff0c;比如 url&#xff0c;headers等传参改变&#xff0c;或者测试用例的逻辑、断言改变&#xff0c;那么整个测试代码都需要改变。apiobject设计模式借鉴了pageobject的设计模式&#xff0c;可…

3. PyCharm、PyQt5、PyQt5-tools的下载安装、基于PyCharm开发PyQt5

1、 PyCharm的下载安装 为什么选择PyCharm&#xff1f;而不用QtCreator&#xff0c;很明显&#xff0c;QtCreator基于C/QT开发时确实很不错&#xff0c;但是基于Python/QT开发时就显得比较鸡肋了&#xff0c;代码的智能提示&#xff0c;高亮等都没有。。而PyCharm就比较牛逼了…

【GD32F427开发板试用】位带操作实现多线程下的跑马灯

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;SmallWhite 一、位带操作 作用&#xff1a;对某一位或者几个连续的位进行操作 前言 我们在使用GD32等单片机时使用到的固件库编程&#xff…

int 和 Integer 有什么区别?为什么要有包装类?

基本数据类型 在 Java 中&#xff0c;一共有 8 种基本类型&#xff08;primitive type&#xff09;&#xff0c;其中有 4 种整型、2 种浮点类型、1 种用于表示 Unicode 编码的字符类型 char 和 1 种用于表示真假值的 boolean 类型。 4 种整型&#xff1a;int、short、long、by…