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

Ajax 学习笔记

一、Ajax

1.1 什么是Ajax

AJAX = Asynchronous JavaScript and XML(异步的JavaScript和XML)。

Ajax是一种在无需加载整个网页的情况下,能够更新部分网页的技术,它不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。

例如在搜索框,输入字符的时候,提醒框实时更新,但是页面地址没变,这就是Ajax的功劳。

没有使用ajax技术的网站,想要更新内容或者提交一个表单,都需要重新加载整个页面,使用了ajax技术的网页,通过在后台服务器进行的少量的数据交换,就可以实现异步局部更新

1.2 利用ajax可以做什么

  • 注册时,输入用户名自动检测用户是否已经存在

  • 登录时,提醒用户名密码错误

  • 删除数据行时,将行ID发送到后台,后台在数据库中删除,数据库删除成功后,在页面DOM中将数据行也删除。

1.3 jQuery 实现Ajax

先不考虑纯JS实现Ajax的方法,这里直接使用jquery提供的,更方便学习,避免重复造轮子,可以去了解下本质XMLHttpRequest !
也没有展示用iframe标签伪造ajax的方法,有兴趣的话可以参考狂神原课程视频。

Ajax的核心是XMLHttpRequest对象(XHR)。XHR为向服务器发送请求和解析服务器响应提供了接口。能够以异步方式从服务器获取新数据。

jQuery提供多个与AJAX有关的方法。

通过jQuery AJAX方法,能够使用HTTP Get和HTTP Post从远程服务器上请求文本、HTML、XML或JSON,同时能够把这些外部数据直接载入网页的被选元素中。

jQuery不是生产者,而是大自然搬运工。jQuery Ajax本质就是XMLHttpRequest,对他进行了封装,方便调用!

1.3.1 jquery的安装和使用

jquery的安装和使用和基础知识,见另一篇笔记jQuery学习笔记_爱学习的小船的博客-CSDN博客

1.3.2 jQuery Ajax 的核心方法

jQuery.get() 方法的主要参数如下:

jQuery.get(…) 主要参数:
· url: 待载入页面的url地址
· data: 待发送的 key/value 参数
· success: 载入成功时回调函数
· dataType: 返回内容格式,xml, json, script, text, html

jQuery.ajax() 方法类似,最常用的参数 仍是 url data success

jQuery.ajax(…) 主要参数:
· url: 待载入页面的url地址
· data: 待发送的 key/value 参数
· success: 载入成功时回调函数
· error:失败之后执行的回调函数(全局)
· type:请求方式,GET、POST(1.9.0之后用method)

类似的还有 jQuery.post()

1.3.3 简单版 (前端数据-->后端-->success)(使用最原始的HttpServletResponse处理)

这是最原始的HttpServletResponse处理,最简单也最通用,

主要实现的效果: 前端表单里的数据data,传给后端进行处理,后端返回再返回简单的true或false

这里省略了一下关于web.xml 和 springmvc的配置,主要体验一下ajax

  1. 编写一个controller方法:

@Controller
public class AjaxController {@RequestMapping("/a1")public void ajax1(String name , HttpServletResponse response) throws IOException {//if ("admin".equals(name)){response.getWriter().print("true");}else{response.getWriter().print("false");}}
}
  1. 导入jquery,可以用在线的CDN,也可以下载导入,方法见jquery的笔记,这里是用绝对地址导入:

<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="${pageContext.request.contextPath}/statics/js/jquery-3.1.1.min.js"></script>
  1. index.jsp代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>$Title$</title><%--<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>--%><script src="${pageContext.request.contextPath}/statics/js/jquery-3.1.1.min.js"></script><script>function a1(){$.post({url:"${pageContext.request.contextPath}/a1",data:{'name':$("#txtName").val()},success:function (data,status) {alert(data);alert(status);}});}</script></head><body><%--onblur:失去焦点触发事件--%>用户名:<input type="text" id="txtName" onblur="a1()"/></body>
</html>

实现的过程如下图所示,需要对应的名称也在图中标出来了

1.3.4 升级版(前端事件-->后端-->数据给前端展示)(使用@ResponseController注解,处理后端返回)

结合学习的json, 使用@ResponseController注解来处理后端返回给前端的数据,可以自动转为json格式,

主要实现的效果: 前端的事件(例如button的点击)-->触发相应的function-->找到后端对应的controller进行处理, 后端返回再返回数据-->前端接收这些数据,处理后再进行显示.

  1. User实体类

//需要提前下载lombok插件
@Data //自动生成getset方法
@AllArgsConstructor  //自动生成有参构造
@NoArgsConstructor  //自动生成无参构造
public class User {private String name;private int age;private String sex;
}
  1. controller层的处理函数

@RequestMapping("/a2")
@ResponseBody
public List<User> ajax2(){List<User> list = new ArrayList<User>();list.add(new User("Boat",2,"女"));list.add(new User("Jack",3,"男"));list.add(new User("Rose",4,"女"));return list; //由于@ResponseBody注解,将list转成json格式返回
}
  1. 前端页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<input type="button" id="btn" value="获取数据"/>
<table width="80%" align="center"><tr><td>姓名</td><td>年龄</td><td>性别</td></tr><tbody id="content"></tbody>
</table>
<script src="${pageContext.request.contextPath}/statics/js/jquery-3.1.1.min.js"></script>
<script>$(function () {$("#btn").click(function () {$.post("${pageContext.request.contextPath}/a2",function (data) {console.log(data)var html="";for (var i = 0; i <data.length ; i++) {html+= "<tr>" +"<td>" + data[i].name + "</td>" +"<td>" + data[i].age + "</td>" +"<td>" + data[i].sex + "</td>" +"</tr>"}$("#content").html(html);});})})
</script>
</body>
</html>

处理的过程如下图所示:

效果如下图所示

1.3.5 至尊版(前端发送数据-->后端处理,并发送数据-->前端接收并展示) (实现注册的提示效果)

主要过程:前端将输入框里的数据发给后端,后端将结果给前端,前端进行展示

  1. Controller层

@RequestMapping("/a3")
public String ajax3(String name,String pwd){String msg = "";//模拟数据库中存在数据if (name!=null){if ("admin".equals(name)){msg = "OK";}else {msg = "用户名输入错误";}}if (pwd!=null){if ("123456".equals(pwd)){msg = "OK";}else {msg = "密码输入有误";}}return msg; //由于@ResponseController注解,将msg转成json格式返回
}
  1. 前端页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>
<body>
<script>function a1() {$.post({url: "/a3",data: {'name': $("#name").val()},success: function (data) {if (data.toString() == 'OK') {$("#userInfo").css("color", "green");} else {$("#userInfo").css("color", "red");}$("#userInfo").html(data);}});}function a2() {$.post({url: "$/a3",data: {'pwd': $("#pwd").val()},success: function (data) {if (data.toString() == 'OK') {$("#pwdInfo").css("color", "green");} else {$("#pwdInfo").css("color", "red");}$("#pwdInfo").html(data);}});}</script>
</head>
<body>
<p>用户名:<input type="text" id="name" onblur="a1()"/><span id="userInfo"></span>
</p>
<p>密码:<input type="text" id="pwd" onblur="a2()"/><span id="pwdInfo"></span>
</p>
</body></body>
</html>

效果如图:

Ajax总结:⭐

使用jQuery需要导入jQuery,使用Vue就导入VUE,两个都用,自己原生态实现

三部曲:

  1. 编写对应处理的Controller,返回消息或者字符串或者json格式的数据;

  1. 编写ajax请求

  1. url:Controller请求

  1. data: 键值对

  1. success:回调函数

  1. 给Ajax绑定事件(例如:点击click,失去焦点onblur,键盘弹起 keyup)

课程链接:【狂神说Java】一小时掌握Ajax_哔哩哔哩_bilibili
http://www.lryc.cn/news/5238.html

相关文章:

  • ​力扣解法汇总1234. 替换子串得到平衡字符串​
  • C++关键字之const、inline、static
  • 【成为架构师课程系列】怎样进行概念架构(Conceptual Architecture)?
  • PostgreSQL的下载安装教程(macOS、Windows)
  • 98年的确实卷,公司新来的卷王,我们这帮老油条真干不过.....
  • 软件架构知识2-系统复杂度
  • JavaSE学习day4_02 数组(超级重点)
  • Theano教程:Python的内存管理
  • Linux | Liunx安装Tomcat(Ubuntu版)
  • 缓冲区浅析
  • Day888.MySQL是怎么保证主备一致的 -MySQL实战
  • 互联网舆情监测系统的发展阶段,TOOM互联网舆情监测系统有哪些?
  • GIT命令操作大全
  • 突破传统开发模式,亚马逊云科技助力中科院加速推动合成生物学
  • 分享开放通达信l2接口的过程,开发之后怎么使用?
  • 33、基于51单片机老人防跌倒蜂鸣器报警系统加速度检测
  • 【项目】基于SpringBoot+Freemarker+Mybatis+MySQL+LayUI实现CRM智能办公系统
  • 手写识别字体的步骤是什么?怎么识别图片中的文字?
  • Mysql 存储过程
  • 【LeetCode】每日一题(3)
  • websocket学习
  • Java面试题及答案整理汇总(2023最新版)
  • 公司来了个卷王,我愿称之为王中王,让人崩溃
  • 波奇学c语言:代码的编译和链接
  • 计算机网络原理--传输层协议(TCP协议十大特性)
  • nvm控制node版本
  • 从0到1一步一步玩转openEuler--13 openEuler用户组管理
  • 知不知道什么叫米筐量化?怎么来的?
  • Urho3D 事件Events
  • Rust学习入门--【8】复合类型