AJAX (异步的JavaScript 和 XML)

目录

1、什么是AJAX

2、作用

1)与服务器通信

2)异步交互(更新局部页面)

3、AJAX 的基本工作原理

4、应用举例

5、jQuery与AJAX

6、使用jQeury实现AJAX

1)$.ajax():发送异步请求

2)$.get():发送get请求

3)$.post():发送post请求


1、什么是AJAX

AJAX(Asynchronous JavaScript and XML)是一种创建交互式、快速动态网页应用的网页开发技术。它使用JavaScript、XML(或JSON)和XMLHttpRequest对象,可以在无需重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。

AJAX 的主要特点是异步性(客户端不需要等待服务器端的响应。在服务器处理请求的过程中,客户端可以进行其他的操作;同步指:浏览器页面在发送请求给服务器,在服务器处理请求的过程中,浏览器页面不能做其他的操作),这意味着它可以在不阻塞用户界面的情况下与服务器进行通信。传统的网页请求(例如通过表单提交)通常需要等待整个页面重新加载,而 AJAX 则允许只更新页面的一部分,从而提供更好的用户体验。

2、作用

1)与服务器通信

与服务器进行数据交换:通过AJAX可以给服务器发送请求,服务器将数据直接响应回给浏览器。

使用AJAX和服务器进行通信,达到使用 HTML+AJAX替换JSP页面:

变为:

浏览器发送请求servlet,servlet 调用业务逻辑层后将数据直接响应回给浏览器页面,页面使用 HTML 进行数据展示。 

2)异步交互(更新局部页面)

可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如用于搜索联想、用户名是否可用的校验等。

在用户名的输入框输入用户名,当输入框一失去焦点,如果用户名已经被占用就会在下方展示提示的信息。这整个过程中没有页面的刷新,只是在局部展示出了提示信息,这就是更新局部页面的效果。

3、AJAX 的基本工作原理

  1. 创建 XMLHttpRequest 对象:这是 AJAX 通信的基础。这个对象允许 JavaScript 向服务器发送 HTTP 请求,并接收服务器的响应。
  2. 设置请求:使用 XMLHttpRequest 对象的 open() 方法来指定请求类型(GET、POST 等)、请求的 URL 以及是否异步处理请求。
  3. 发送请求:调用 XMLHttpRequest 对象的 send() 方法来发送请求。对于 POST 请求,可能需要将请求体作为参数传递给 send() 方法。
  4. 处理响应:设置 XMLHttpRequest 对象的 onreadystatechange 事件处理程序来监听服务器的响应。当服务器的响应准备好时,这个事件处理程序会被触发。然后,可以通过 XMLHttpRequest 对象的 responseText 或 responseXML 属性来获取响应数据。

在Web 中,很多库和框架(如 jQuery、Axios、Fetch API 等)提供了更简洁、更强大的 AJAX 功能,可以更容易地实现 AJAX 功能。

4、应用举例

用户注册功能中,实现当用户名输入框失去焦点时,校验用户名是否在数据库已存在。

分析:

  • 前端
    • 1. 给用户名输入框绑定光标失去焦点事件onblur
    • 2. 发送 ajax请求,携带username参数
    • 3. 处理响应:是否显示提示信息
  • 后端
    • 1. 接收用户名
    • 2. 调用service查询User:此处不做业务逻辑处理,直接返回true
    • 3. 返回标记

创建SelectUserServlet类:

@WebServlet("/selectUserServlet")
public class SelectUserServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1. 接收用户名String username = request.getParameter("username");//2. 调用service查询User对象,此处不进行业务逻辑处理,直接给flag赋值true,即用户名占用boolean flag = true;//3. 响应标记response.getWriter().write("" + flag);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

前端JavaScript部分:

//1. 给用户名输入框绑定 失去焦点事件
document.getElementById("username").onblur = function () {//2. 发送ajax请求// 获取用户名的值var username = this.value; //this : 给谁绑定的事件,this就代表谁//2.1. 创建核心对象var xhttp;if (window.XMLHttpRequest) {xhttp = new XMLHttpRequest();} else {// code for IE6, IE5xhttp = new ActiveXObject("Microsoft.XMLHTTP");}//2.2. 发送请求xhttp.open("GET", "http://localhost:8080/ajax-demo/selectUserServlet?username="+username);xhttp.send();//2.3. 获取响应xhttp.onreadystatechange = function() {if (this.readyState == 4 && this.status == 200) { //说明已经成功响应数据//alert(this.responseText);//判断if(this.responseText == "true"){//用户名存在,显示提示信息document.getElementById("username_err").style.display = '';}else {//用户名不存在 ,清楚提示信息document.getElementById("username_err").style.display = 'none';}}};
}

5、jQuery与AJAX

jQuery对AJAX技术进行了封装和简化。AJAX功能强大,但使用起来相对复杂,涉及到XMLHttpRequest对象的创建、事件监听、状态码判断等多个步骤。而jQuery通过提供简洁易用的API,极大地简化了AJAX的开发过程。

具体来说,jQuery中的$.ajax()方法是一个功能强大的函数,它封装了XMLHttpRequest对象的创建和调用过程,并提供了丰富的配置选项和回调函数,以便开发者能够灵活地处理AJAX请求。使用$.ajax()方法,开发者可以指定请求的URL、请求类型(GET、POST等)、发送的数据、预期返回的数据类型等,并定义请求成功或失败时的回调函数。

此外,jQuery还提供了其他一些简化的AJAX函数,如$.get()、$.post()等,这些函数在内部也是基于$.ajax()方法实现的,但使用上更加简单直观,适用于常见的GET和POST请求场景。

通过使用jQuery的AJAX功能,可以更加高效地进行异步通信,实现网页的动态加载和更新,提升用户体验。同时,jQuery的跨浏览器兼容性也保证了AJAX功能在各种浏览器上的稳定运行。

6、使用jQeury实现AJAX

1)$.ajax():发送异步请求

$.ajax({键值对});

$.ajax({url:"ajaxServlet1" , // 请求路径type:"POST" , //请求方式//data: "username=ss&age=23",//请求参数data:{"username":"ss","age":23},success:function (data) {alert(data);},//响应成功后的回调函数error:function () {alert("出错了")},//表示如果请求响应出现错误,会执行的回调函数dataType:"text"//设置接受到的响应数据的格式});

2)$.get():发送get请求

$.get(url, [data], [callback], [type])
参数:url:请求路径  data:请求参数  callback:回调函数  type:响应结果的类型

3)$.post():发送post请求

$.post(url, [data], [callback], [type])
参数:url:请求路径  data:请求参数  callback:回调函数  type:响应结果的类型

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

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

相关文章

2024五一杯数学建模C题思路分析

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间:2024…

HCIA网络基础

HCIA网络基础是华为认证体系中一个至关重要的部分,它涵盖了计算机网络的基本概念、原理、技术和应用。以下是关于HCIA网络基础更详细的介绍: 一、网络基本概念和特点 网络是由若干计算机和其他设备通过通信线路或其他手段连接起来,进行数据…

JS和TS基础学习

javaScripte export和import javascript中import和export详解 JS之export JS中export怎么用? export导出分为两种导出 命名导出(每个模块包含任意数量) 默认导出(每个模块包含一个) var、let、const [JavaScript中…

解决npm install安装node-sass包容易失败的问题

具体问题如下: npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: XXX3.4.0 npm ERR! Found: webpack5.31.2 npm ERR! node_modules/webpack npm ERR! peer webpack”^4.0.0 || ^5.0.0″ from html-…

SpringBoot和Axios数据的传递和接收-Restful完全版

文章目录 一、基础知识铺垫Axios使用HTTP请求方式数据传输方式SpringBoot获取数据的方式 二、基础传递代码示例(一)Path Variables(二)Get、DeleteRequestParamModelAttribute (三)Post、Put、PatchRequest…

FreeRTOS学习 -- 中断配置

一、什么是中断 中断时微控制器一个很常见的特性,中断是由硬件产生,当中断产生以后CPU就会中断当前的流程而去处理中断服务,Cortex-M内核的MCU提供了一个用于中断管理的嵌套向量中断控制器(NVIC)。 二、中断优先级分…

土壤湿度传感器:助力农业现代化

随着科技的飞速发展,越来越多的先进技术被应用到农业生产中。其中,土壤湿度传感器作为现代农业的重要工具,正逐渐改变着传统农业的生产方式,成为农业现代化的秘密武器。 精确监测:土壤湿度传感器能够实时、精确地监测土…

WIN7用上最新版Chrome

1.下载WIN10最新版Chrome的离线安装包 谷歌浏览器 Chrome 最新版离线安装包下载地址 v123.0.6312.123 - 每日自动更新 | 异次元软件 文件名称:123.0.6312.123_chrome_installer.exe。 123.0.6312.123_chrome_installer.exe 文件右键解压缩得到 chrome.7z&#x…

树莓派3B长时间不操作屏幕息屏无信号处理

树莓派外接显示器,需长时间展示某个网页,经过一段时间,显示器屏幕会黑掉显示无信号。 需修改 /etc/lightdm/lightdm.conf 配置文件中新增如下两行并重启。 xserver-commandX -s 0 dpms sleep-inactive-timeout0

软考 - 系统架构设计师 - Web 应用真题(2)

问题 1: 淘汰策略:遗留系统技术含量低,业务价值也低,所以需要全面重新开发一个系统来替代遗留系;(一般是企业的业务发生了根本变化,遗留系统已经基本不再适应企业运作的需要;或者是遗…

【Python基础】19.eval函数的使用

eval函数 eval()将字符串转变为有效的表达式来求值并返回对应的结果 基础数据计算 In [1]: eval("1 1") Out[1]: 2字符串重复 In [2]: eval (" * * 10") Out[2]: **********字符串转为列表 In [3]: type(eval("[1,2,3,4,5]")) Out[3]: lis…

docker 简单使用

docker 简单使用 一、 docker 安装二、docker 使用1. docker pull 拉取镜像2. docker run 后台运行3. docker ps 查看容器运行状态4. docker exec 进入容器5. exit 退出容器6. docker restar 重启容器7. docker stop 停止运行容器8. docker stop 启动容器9. docker stop 删除容…

nextjs渲染篇

1 服务器组件 默认情况下,Next.js 使用服务器组件。 1.1 服务器组件是如何呈现的? 在服务器上,Next.js 使用 React 的 API 来编排渲染。渲染工作被拆分为多个块:按单个路段和Suspense 每个区块分两个步骤呈现: Re…

Python一键修改目录下所有文件的编码格式

前言 在开发中总会遇到这样的问题,别人的代码采用的编码格式是GBK,而自己的项目的编码格式是UTF-8,如果直接复制过来,就会出现中文乱码的问题,一个个该编码格式又非常麻烦。所以我写了这样一小段简短的代码&#xff0…

Python 中的高阶函数

Python 中的高阶函数是指可以接受函数作为参数,或者返回函数作为结果的函数。这种特性让编程变得更加灵活和功能强大,常见的高阶函数有 map()、filter()、reduce() 和 sorted() 等。 map() 函数: map() 函数接受一个函数和一个可迭代对象&a…

select * from .... for update 使用 防止重复提交/操作

详情点下方链接 for-update笔记链接 注:当选中某一个行的时候,如果是通过主键id选中的。那么这个时候是行级锁。 其他的行还是可以直接insert 或者update的。如果是通过其他的方式选中行,或者选中的条件不明确包含主键。这个时候会锁表。其他的事务对该表的任意一行…

SQLite的PRAGMA 声明(二十三)

返回:SQLite—系列文章目录 上一篇:SQLite从出生到现在(发布历史记录)(二十二) 下一篇:用于 SQLite 的异步 I/O 模块(二十四) PRAGMA 语句是特定于 SQLite 的 SQL 扩…

Valorant 瓦罗兰特更新后进不去游戏?3个解决方法完美解决

Valorant 瓦罗兰特更新后进不去游戏?3个解决方法完美解决 《无畏契约(VALORANT)》是一款由知名游戏开发商(Riot Games)开发并且免费的多人射击游戏。游戏背景设定在一个幻想世界中,玩家将探索瓦罗兰大陆上…

面对深度合成技术备案,企业应该如何做好准备?

在这个数字化高速发展的时代,互联网信息服务已经深入我们生活的方方面面。特别是那些应用深度合成技术的互联网信息服务,比如通过算法实现的图像、语音和视频的合成等,现在都需要进行严格的备案。由于备案周期较长,建议涉及这些技…

基于python的二手房数据分析建模及可视化研究,爬取链家二手房数据,可视化分析,房价预测模型

介绍 主要涉及通过爬取济南市链家二手房数据,然后对数据进行处理,包括缺省值处理,高德地图获取二手房地址所属市区,经纬度等数据处理。然后通过python的flask框架编写后端接口,把数据响应给前端。然后前端通过AJAX请求…