当前位置: 首页 > news >正文

Ajax学习

文章目录

  • Ajax
    • Ajax 是什么
    • Ajax 经典应用场景
    • Ajax 原理示意图
    • ajax的异步请求的方法
      • ajax的逻辑:
    • 应用实例-验证用户名是否存在
      • 思路框架图:
    • 需求分析: 到数据库去验证用户名是否可用
      • 思路框架图
    • 大功告成:
    • 使用JQuery-Ajax实现上面相同的需求:

Ajax

Ajax 是什么

  1. AJAX 即"Asynchronous Javascript And XML"(异步 JavaScript 和 XML)
  2. Ajax 是一种浏览器异步发起请求(指定发哪些数据),局部更新页面的技术

Ajax 经典应用场景

  1. 搜索引擎根据用户输入关键字,自动提示检索关键字
  2. 动态加载数据,按需取得数据【树形菜单、联动菜单…】
  3. 改善用户体验。【输入内容前提示、带进度条文件上传…】
  4. 电子商务应用。 【购物车、邮件订阅…】
  5. 访问第三方服务。【访问搜索服务、rss 阅读器】
  6. 页面局部刷新, https://piaofang.maoyan.com/dashboard

Ajax 原理示意图

在这里插入图片描述

ajax的异步请求的方法

在这里插入图片描述
在这里插入图片描述

要在点击某个按钮之后才能有反应,所以整个的ajax的异步请求需要在onclick里面写:

 // $(function () {}) 等价 window.onload = function () {}
$(function () {// $("#btn01") 底层: document.getElementById("btn01")var $checkButton = $("#checkButton");	//得到按钮// 绑定click事件$checkButton.click(function () {在这里写ajax的逻辑...}
}

ajax的逻辑:

  1. 创建XMLHttpRequest对象(!!!) [ajax引擎对象]
var xhr = new XMLHttpRequest();
  1. 准备发送指定数据:open,send
 xhr.open("GET", "/ajax/checkUserServlet?uname=" + $uname, true);

在send函数调用前,需要给XMLHttpRequest绑定一个事件onreadystatechange事件。 该事件可以去指定一个函数,当数据变化时,会出发onreadystatechange每当xhr对象readyState改变时, 就会触发onreadystatechange事件

xhr.onreadystatechange = function () { .... }
  1. 真正的发送ajax请求[http请求]
    老韩再说明如果你POST 请求,再send(“发送的数据”)
xhr.send();

应用实例-验证用户名是否存在

  1. 演示 jquery 发送 ajax 请求的案例
    1 ) 在输入框输入用户名
    2 ) 点击验证用户名, 服务端验证该用户名是否已经占用了, 如果该用户已经占用, 以 json格式返回该用户信息
    3 ) 假定用户名为 king , 就不可用, 其它用户名可以
    4 ) 对页面进行局部刷新, 显示返回信息
    在这里插入图片描述

思路框架图:

在这里插入图片描述

  1. 导包
    由于需要以json格式返回数据,所以需要导入gson包。
    由于还是用到servlet,需要在tomcat的lib目录下找servlet-api并导入该包。
    导入到哪里?
    由于是web应用,所以需要导入到web/WEB-INF/lib目录下。
    在这里插入图片描述
    你以为结束了? 还需要导入jquery所需要的包:
    在这里插入图片描述

  2. 编写用户登录界面(这里需要用到ajax的异步请求的方法)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>用户注册</title><!--使用JQUery需要先正确加载JQuery--><script type="text/javascript" src="script/jquery-3.7.1.min.js"></script><script type="text/javascript">// $(function () {}) 等价 window.onload = function () {}$(function () {// $("#btn01") 底层: document.getElementById("btn01")var $checkButton = $("#checkButton");// 绑定click事件$checkButton.click(function () {// 1. 创建XMLHttpRequest对象(!!!) [ajax引擎对象]var xhr = new XMLHttpRequest();// 获取用户填写的用户名var $uname = $("#uname").val();// alert($uname);// 2. 准备发送指定数据:open,sendxhr.open("GET", "/ajax/checkUserServlet?uname=" + $uname, true);	// 这里发送数据是GET方法,把内容一起打过去// 在send函数调用前,需要给XMLHttpRequest绑定一个事件onreadystatechange事件// 该事件可以去指定一个函数,当数据变化时,会出发onreadystatechange// 每当xhr对象readyState改变时, 就会触发onreadystatechange事件xhr.onreadystatechange = function () {// 如果请求已完成,且响应已就绪,且状态码是200if(xhr.readyState == 4 && xhr.status == 200){//把json数据显示在div1中var $div1 = $("#div1");var responseText = xhr.responseText;console.log("当前得到的response=" + responseText)$div1.html(responseText);if(responseText != "") {// 返回的json串为"",则用户名可用$("#myres").val("用户名不可用");}else {$("#myres").val("用户名可用");}}}//3. 真正的发送ajax请求[http请求]// 老韩再说明如果你POST 请求,再send("发送的数据")xhr.send();})});</script>
</head>
<body>
<h1>用户注册~</h1>
<form action="/ajax/checkUserServlet" method="post">用户名字:<input type="text" name="username" id="uname"><input type="button" id="checkButton" value="验证用户名"><input style="border-width: 0;color: red" type="text" id="myres"><br/><br/>		<!--编写服务端打回来的内容-->用户密码:<input type="password" name="password"><br/><br/>电子邮件:<input type="text" name="email"><br/><br/><input type="submit" value="用户注册">
</form>
<h1>返回的json数据</h1>
<div id="div1"></div>
</body>
</html>
  1. 编写checkUserServlet.java,接受发送过来的数据
@WebServlet(urlPatterns = "/checkUserServlet")
public class checkUserServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 

相关文章:

  • 2023-12-29 服务器开发-centos部署ftp
  • docker-compose 安装gitlab
  • badcase 探索与召回分析
  • C++ Primer Plus----第十二章--类和动态内存分布
  • npm 抽取 解析(持续更新中)
  • jdk8升级JDK17避坑指南
  • 大创项目推荐 深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv
  • 本地映射测试环境域名,解决登录测试环境后,也可以使用本地域名访问,可以正常跑本地项目
  • k8s之陈述式资源管理
  • 八、typescript 高级类型与模块
  • 【每日一题】LeetCode206.反转链表
  • Python圣诞树代码
  • 【UML】第12篇 序列图(1/2)——基本概念和构成
  • [数据结构]树与二叉树的性质
  • ------- 计算机网络基础
  • 深入了解以太坊
  • php的引用
  • 11111111
  • Cumulo 的 ClojureScript 模块已经成型
  • Django 博客开发教程 8 - 博客文章详情页
  • gitlab-ci配置详解(一)
  • Joomla 2.x, 3.x useful code cheatsheet
  • Netty 4.1 源代码学习:线程模型
  • ubuntu 下nginx安装 并支持https协议
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 力扣(LeetCode)21
  • 力扣(LeetCode)965
  • 聊聊redis的数据结构的应用
  • 马上搞懂 GeoJSON
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前端知识点整理(待续)
  • 试着探索高并发下的系统架构面貌
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 异常机制详解
  • 湖北分布式智能数据采集方法有哪些?
  • # C++之functional库用法整理
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (十八)三元表达式和列表解析
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET 解决重复提交问题
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .pyc文件是什么?
  • ::
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • [ solr入门 ] - 利用solrJ进行检索
  • [20140403]查询是否产生日志
  • [C++打怪升级]--学习总目录
  • [docker] Docker的数据卷、数据卷容器,容器互联
  • [java面试]宇信易诚 广州分公司 java笔试题目回忆录
  • [Linux]进程信号(信号入门 | 信号产生的方式 | 信号捕捉初识)
  • [Machine Learning] 领域适应和迁移学习
  • [MySQL] 二进制文件