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 {
    @Override
    protected 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);
    }

    @Override
    protected 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, IE5
        xhttp = 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:响应结果的类型

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode-924. 尽量减少恶意软件的传播【深度优先搜索 广度优先搜索 并查集 图 哈希表】

LeetCode-924. 尽量减少恶意软件的传播【深度优先搜索 广度优先搜索 并查集 图 哈希表】 题目描述:解题思路一:解题思路二:0解题思路三:0 题目描述: 给出了一个由 n 个节点组成的网络,用 n n 个邻接矩阵图…

Ubuntu:VSCode中编译运行C++代码

版本:Ubuntu22.04.1 LTS 目录 1 安装VSCode并汉化 2 检查Ubuntu是否已经安装了 GCC 3 在VScode中安装C/C扩展 4 在VSCode中进行C/C配置 1 安装VSCode并汉化 安装VSCode(参考之前博客Ubuntu:安装VSCode_ubuntu vscode-CSDN博客&#xff…

面向未来的内容营销:Kompas.ai的趋势预测能力

在这个快速变化的数字时代,内容营销的成功很大程度上取决于能否准确预测并迅速响应未来的趋势。拥有前瞻性的内容策略能够让品牌在竞争中占据优势,与受众建立更深层次的联系。本文将深入探讨预测未来趋势在内容营销战略中的价值,分析Kompas.a…

【LeetCode刷题记录】54. 螺旋矩阵

54 螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: 输入&#xf…

基于springboot实现知识管理系统项目【项目源码+论文说明】

基于springboot实现知识管理系统演示 摘要 随着信息互联网信息的飞速发展,无纸化作业变成了一种趋势,针对这个问题开发一个专门适应师生作业交流形式的网站。本文介绍了知识管理系统的开发全过程。通过分析企业对于知识管理系统的需求,创建了…

51单片机学习笔记16 小型直流电机和五线四相电机控制

51单片机学习笔记16 小型直流电机和五线四相电机控制 一、电机分类二、小型直流电机控制1. 简介2. 驱动芯片ULN2003D3. 代码实现dc_motor_utils.cmain.c 三、五线四相步进电机控制1. 步进电机工作原理2. 构造3. 极性区分4. 驱动方式5. 28BYJ-48步进电机(1&#xff0…

nextjs渲染篇

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

linux 挂载云盘 NT只能挂载2T,使用parted挂载超过2T云盘

一、删除原来挂载好的云盘和分区 1、查看挂载号的云盘 fdisk -l 发现我们有5千多G但是只挂载了2T,心里非常的慌张!十分的不爽! 好,我们把它干掉,重新分区! 2、解除挂载 umount /homeE 没保存跳转到&…

Oracle 11g完全卸载教程(Windows)

文章目录 一、停止Oracle服务二、卸载Oracle1、卸载Oracle产品2、删除注册表3、删除环境变量以及其余文件 一、停止Oracle服务 进入服务 找到服务中的Oracle服务并且停止 全部停止运行成功 二、卸载Oracle 1、卸载Oracle产品 点击开始菜单找到Oracle,然后点击…

cobaltstrike 流量隐藏

云函数 新建一个云函数,在代码位置进行修改 首先导入 yisiwei.zip 的云函数包 PYTHON # -*- coding: utf8 -*- import json, requests, base64def main_handler(event, context):C2 https://49.xx.xx.xx # 这里可以使用 HTTP、HTTPS~下角标~ path event[path]h…

连续上榜|全息网御实力入选《中国网络安全行业全景图》

2024年4月12日,国内网络安全专业媒体安全牛正式发布第十一版《中国网络安全行业全景图》(以下简称“全景图”)。 本次全景图研究历时近4个月,共收到510家国内安全厂商4941项申报,实际收录2413项(包含部分往…

如何把npm切换成yarn管理项目

1.删掉项目中package-lock.json和依赖包 这一步手动删掉就好 2.全局安装yarn npm install -g yarn 3.可以开始执行yarn install安装依赖 1)执行yarn init 这一步是修改npm生成的package.json文件,可能会遇到这个问题: 这个查了一下是有…

电路笔记 : esp32pico-d4编程

安装 根据文章arduino ESP32 001 从零开始点亮小灯,安装相关软件依赖。 串口驱动 arduino安装 安装完arduino,需要安装esp32相关的开发依赖 不要选Arduino ESP32 Boards(选下边那个),它对应的是背景图片里的板子 网络问题 关…

git报错

这里写自定义目录标题 git报错Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 有一个原因就是在github上设置对应密钥时,有一个key获取应该设置为…

Docker部署MongoDB数据库

文章目录 官网地址docker 网络mongod.conf部署 MongoDB部署 mongo-expressdocker-compose.ymlMongoDB shell 官网地址 https://www.mongodb.com/zh-cn docker 网络 # 创建 mongo_network 网络 docker network create mongo_network # 查看网络 docker network list # 容器连…

【鸿蒙开发】第二十一章 Media媒体服务(一)

1 简介 Media Kit(媒体服务)提供了AVPlayer和AVRecorder用于播放、录制音视频。 在Media Kit的开发指导中,将介绍各种涉及音频、视频播放或录制功能场景的开发方式,指导开发者如何使用系统提供的音视频API实现对应功能。比如使用…

Windows安装Ollama结合内网穿透实现公网访问本地大语言模型Web交互界面

目录 ⛳️推荐 前言 1. 运行Ollama 2. 安装Open WebUI 2.1 在Windows系统安装Docker 2.2 使用Docker部署Open WebUI 3. 安装内网穿透工具 4. 创建固定公网地址 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍…

Java+Selenium自动化测试环境搭建

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,涨薪更快 本主要介绍以Java为基础,搭建Selenium自动化…

操作系统-一个学习能力的新高度

目录 一、目标二、计划三、完成情况四、提升改进(最少3点)五、意外之喜(最少2点)六、总结 一、目标 通过考试,当然这是眼前目标;通过对知识的学习,补上在计算机中那些透明的东西,从而让知识可以按照逻辑一层一层的构建知识大厦&a…

模仿银行系统的极简Java三层结构应用——转账功能的实现

我们今天来给系统加上转账功能。转账功能说白了就是给两个账户同时存取款,相对于存取款就多了一个账户的比对。 首先,用户表现层: 是用户表现界面要添加一条转账功能的提示: 这没什么说的,下面就是在switch里写相应的…