【Ajax】异步通信

news2025/7/29 6:35:18

一.概述

  • 概念:AJAX(Asynchronous JavaScript And XML):异步的 JavaScript 和 XML

  • 作用:

    1. 服务器进行数据交换:通过AJAX可以给服务器发送请求,并获取服务器响应的数据

      使用了AJAX和服务器进行通信,就可以使用 HTML+AJAX来替换JSP页面,可以说是终结了JSP的存在,促使了前后端分离开发

在这里插入图片描述
2. 实现异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索时的联想、检查用户名是否可用校验,等等
在这里插入图片描述

补充说明:异步&同步通信
在这里插入图片描述

二.使用

在这里插入图片描述

(1) GET请求

(1.1) 流程

  1. 创建 XMLHttpRequest 对象:用于和服务器交换数据
let xhr = new XMLHttpRequest();
  1. 向服务器发送请求
xhr.open("GET","url");
xhr.send();
  1. 获取服务器响应数据
// 监听请求
xhr.onreadystatechange = function () {
// 表示请求成功并且获取到响应数据
if (xhr.readyState == 4 && xhr.status == 200){
		alert(xhr.responseText);
    	// 拿到数据进行一系列操作....
	}
}

相关属性说明:

属性描述
onreadystatechange定义当 readyState 属性发生变化时被调用的函数
readyState保存 XMLHttpRequest 的状态0:请求未初始化 1:服务器连接已建立 2:请求已收到 3:正在处理请求 4:请求已完成且响应已就绪
responseText字符串返回响应数据
responseXML以 XML 数据返回响应数据
status返回请求的状态号200: "OK"403: "Forbidden"404: "Not Found"如需完整列表请访问 Http 消息参考手册
statusText返回状态文本(比如 “OK” 或 “Not Found”)

(1.2) 完整代码示例

如果需要,可以通过?在url后面拼接请求参数

	// 1.创建 XMLHttpRequest 对象:用于和服务器交换数据
    let xhr = new XMLHttpRequest();

    // 2.向服务器发送请求
    xhr.open("GET", "http://localhost/newsWork_war_exploded/Search?searchText=" + searchText.value);
    xhr.send();
	
	// 3.获取服务器响应数据
	xhr.onreadystatechange = function () {
	// 表示请求成功并且获取到响应数据
	if (xhr.readyState == 4 && xhr.status == 200){
			alert(xhr.responseText);
        	// 拿到数据可以进行一系列操作....
		}
	}

简单使用示例:
在这里插入图片描述

(2) POST请求

post请求发送方式与Get请求类似

(2.1) 流程

  1. 创建 XMLHttpRequest 对象:用于和服务器交换数据
let xhr = new XMLHttpRequest();
  1. 向服务器发送请求
// 方式一:简单请求
xhr.open("POST","url");
xhr.send();


// 方式二:
// 如需像 HTML表单那样发送数据,需通过 `setRequestHeader()` 添加一个 HTTP 头部。
// 请在 `send()` 方法中规定您需要发送的数据
// 2.1 发起请求
xhr.open("POST", 'http://localhost/newsWork_war_exploded/login');
// 2.2 设置HTTP头部
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
// 2.3 规定需要发送的数据
xhr.send(`username=${username.value}&userPassword=${userPassword.value}`);
  1. 获取服务器响应数据
xhr.onreadystatechange = function () {
// 表示请求成功并且获取到响应数据
if (xhr.readyState == 4 && xhr.status == 200){
		alert(xhr.responseText);
        // 拿到数据可以进行一系列操作....
	}
}

相关属性说明:

属性描述
onreadystatechange定义当 readyState 属性发生变化时被调用的函数
readyState保存 XMLHttpRequest 的状态0:请求未初始化 1:服务器连接已建立 2:请求已收到 3:正在处理请求 4:请求已完成且响应已就绪
responseText字符串返回响应数据
responseXML以 XML 数据返回响应数据
status返回请求的状态号200: "OK"403: "Forbidden"404: "Not Found"如需完整列表请访问 Http 消息参考手册
statusText返回状态文本(比如 “OK” 或 “Not Found”)

(2.2) 完整代码示例

post与get不同之处在于需要自己设置HTTP头部并在send中规定传递参数

// 1.创建 XMLHttpRequest 对象:用于和服务器交换数据
let xhr = new XMLHttpRequest();
// 2.向服务器发送请求
xhr.open("POST", 'http://localhost/newsWork_war_exploded/login');
// 2.1设置HTTP头部
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
// 2.2规定需要发送的数据
xhr.send(`username=${username.value}&userPassword=${userPassword.value}`);

// 3.获取服务器响应数据
xhr.onreadystatechange = function () {
// 表示请求成功并且获取到响应数据
if (xhr.readyState == 4 && xhr.status == 200){
		alert(xhr.responseText);
        // 3.1 拿到数据可以进行一系列操作....
	}
}

简单使用示例:
在这里插入图片描述

三.补充

(1) 发起同步请求

open方法的完整格式如下:

  • open(method, url, async)

    • method:请求的类型:GET 还是 POST

    • url:服务器(文件)位置

    • async:true(异步)或 false(同步) |

由于其不写默认是true异步请求,所以我们可以不用设置。当如果我们需要使用同步请求时,我们需要手动将第三个参数设置为false

xhr.open("method", 'url', false);
xhr.send();

// 不用再监听状态(xhr.onready....)
// 可直接使用结果
alert(xhr.responseText);

不推荐使用,常用于一些快速测试。需要注意的是,当我们发起同步请求时,此操作可能会导致应用程序挂起或停止(无法再执行其他操作)。而通过异步发送,JavaScript 不必等待服务器响应,可继续执行其他操作

(2) Json格式

在post请求中我们也可以传递和接收Json格式的数据:

  • 可以自己将对象转为Json传递
const requestData = JSON.stringify(formDate)
xhr.send(paramDate)
  • 接收并解析Json格式数据
// 方式一:手动解析
const responseData = JSON.parse(xhr.responseText)

// 方式二: 设置自动解析
xhr.responseType='json'

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

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

相关文章

设计模式-第11章(观察者模式)

观察者模式观察者模式观察者模式的特点老板回来了观察者模式 观察者模式又叫发布订阅模式。 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能…

nextcloud挂载阿里云oss 过程

1. 情景 : 已经使用docke-compsoe 搭建起来nextcloud 并投入使用 ,现在内存不够需要挂一个oss nextcloud挂载阿里云oss大概思路 : 使用阿里官方提供的 ossfs , 将oss挂载到服务器目录中 , 在docker-compose中的 做容…

ArcGIS10.6“License许可启动无响应”解决方法

以下是我尝试过的方法关闭防火墙(很必要)替换 “Service.txt” 及 "ARCGIS.exe"文件(感觉没什么用)修改服务设置(很必要)更改注册表(可有)更改端口号(好像没什…

My RuoYi 微服务

一 快速了解 文档(特别详细):介绍 | RuoYi 介绍 技术架构(图):介绍 | RuoYi快速了解 技术选型 系统环境主框架持久层视图层内置功能 用户管理:用户是系统操作者,该功能主要完成系…

HBase---HBase基础语法

HBase基础语法 文章目录HBase基础语法基本操作进入 HBase 客户端命令行查看命名空间查看命名空间下的表创建命名空间创建表查看表描述禁用/启用删除表新增列族删除列族更改列族存储版本的限制put 增加数据get 查看数据get条件查询删除指定列族下的指定列删除指定行全表扫描全表…

Java线程池之线程复用原理解析

什么是线程复用 在Java中,我们正常创建线程执行任务,一般都是一条线程绑定一个Runnable执行任务。而Runnable实际只是一个普通接口,真正要执行,则还是利用了Thread类的run方法。这个rurn方法由native本地方法start0进行调用。我们…

2023最新设计模式常见面试题汇总进大厂必备

2023最新设计模式常见面试题汇总1.说一下设计模式?你都知道哪些?2.什么是单例模式?3.什么是简单工厂模式?4.什么是抽象工厂模式?5.什么是观察者模式?1)定义观察者(消息接收方&#x…

201809-3 CCF 元素选择器 满分题解(超详细注释代码) + 解题思路(超详细)

问题描述 解题思路 根据题意可以知道在查询中可以分为两种情况 第一种是查询一个标签选择器或者id选择器(可以称为一级查询) 第二种就是存在大于两级的查询(可以称为多级查询) 显然第一种查询需要存储每一种元素在内容中所有出现…

2023 最新计算机视觉学习路线(入门篇)

计算机视觉是人工智能的一个领域,专注于教计算机解释和理解视觉世界。它涉及使用算法、深度学习模型和其他技术使机器能够识别图像或视频中的对象。计算机视觉可用于各种任务,如面部识别、目标检测、图像分割、运动估计和跟踪等。重要性计算机视觉的重要…

Leetcode DAY 57: 回文子串 and 最长回文子序列

647. 回文子串 题目: Given a string s, return the number of palindromic substrings in it. A string is a palindrome when it reads the same backward as forward. A substring is a contiguous sequence of characters within the string. 1、暴力解法&#…

docker-compose+HAProxy+Keepalived搭建高可用 RabbitMQ 集群

基础环境准备 系统环境:Centos7.6 Docker version: 1.13.1, build 7d71120/1.13.1 Docker Compose version: v2.2.2 三个节点: 10.10.11.79 (这一台做rabbitmq集群根节点) 10.10.11.80 (这台做haproxyke…

K8S Pod健康检查

因为 k8s 中采用大量的异步机制、以及多种对象关系设计上的解耦,当应用实例数 增加/删除、或者应用版本发生变化触发滚动升级时,系统并不能保证应用相关的 service、ingress 配置总是及时能完成刷新。在一些情况下,往往只是新的 Pod 完成自身…

Python|蓝桥杯进阶第二卷——贪心

欢迎交流学习~~ 专栏: 蓝桥杯Python组刷题日寄 蓝桥杯进阶系列: 🏆 Python | 蓝桥杯进阶第一卷——字符串 🔎 Python | 蓝桥杯进阶第二卷——贪心 💝 Python | 蓝桥杯进阶第三卷——动态规划(待续&#xf…

关于信息安全认证CISP、PTE对比分析

CISP 注册信息安全专业人员 CISP-PTE 注册渗透测试工程师(以下简称PTE) 1 、发证机构 CISP与PTE的发证机构都是中国信息安全测评中心,政府背景给认证做背书,学员信息都在中国政府可控的机构手中; 如果想在政府、国…

TryHackMe-Tardigrade(应急响应)

Tardigrade 您能否在此 Linux 端点中找到所有基本的持久性机制? 服务器已遭到入侵,安全团队已决定隔离计算机,直到对其进行彻底清理。事件响应团队的初步检查显示,有五个不同的后门。你的工作是在发出信号以使服务器恢复生产之前…

MyBatis源码分析(七)MyBatis与Spring的整合原理与源码分析

文章目录写在前面一、SqlSessionFactoryBean配置SqlSessionFactory1、初识SqlSessionFactoryBean2、实现ApplicationListener3、实现InitializingBean接口4、实现FactoryBean接口5、构建SqlSessionFactory二、SqlSessionTemplate1、初始SqlSessionTemplate2、SqlSessionTemplat…

这个WPF DataGrid组件,可以让业务数据管理更轻松!(Part 2)

DevExpress WPF的DataGrid组件是专用于WPF平台的高性能XAML网格控件,该组件附带了几十个具有高影响力的功能,使开发者可以轻松地管理数据并根据也无需要在屏幕上显示数据。在上文中(点击这里回顾>>)为大家介绍了DevExpress …

HTTPS详解(原理、中间人攻击、CA流程)

摘要我们访问浏览器也经常可以看到https开头的网址,那么什么是https,什么是ca证书,认证流程怎样?这里一一介绍。原理https就是httpssl,即用http协议传输数据,数据用ssl/tls协议加密解密。具体流程如下图&am…

企业级信息系统开发学习笔记1.8 基于Java配置方式使用Spring MVC

文章目录零、本节学习目标一、基于Java配置与注解的方式使用Spring MVC1、创建Maven项目 - SpringMVCDemo20202、在pom.xml文件里添加相关依赖3、创建日志属性文件 - log4j.properties4、创建首页文件 - index.jsp5、创建Spring MVC配置类 - SpringMvcConfig6、创建Web应用初始…

C++基础了解-02-C++ 数据类型

C 数据类型 一、C 数据类型 使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当创建一个变量时,就会在内存中保留一些空间。 可能需要存储各种数据类型(比如字符型、宽…