1、简介
- AJAX = Asynchronous JavaScript and XML(异步的JavaScript和XML)。.
- AJAX是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
- Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。
- 传统的网页(即不用ajax技术的网页),想要更新内容或者提交一个表单,都需要重新加载整个网页。
- 使用ajax技术的网页,通过在后台服务器进行少量的数据交换,就可以实现异步局部更新。
- 使用Ajax,用户可以创建接近本地桌面应用的直接、高可用、更丰富、更动态的Web用户界面。
- 用处
- 注册时,输入用户名自动检测用户是否已经存在。·
- 登陆时,提示用户名密码错误
- 删除数据行时,将行ID发送到后台,后台在数据库中删除,数据库删除成功后,在页面DOM中将数据行也删除。
- 等等
- 案例
- 在2005年,Google通过其Google Suggest使AJAX变得流行起来。Google Suggest能够自动帮你完成搜索单词。
- Google Suggest使用AJAX创造出动态性极强的 web 界面:当您在谷歌的搜索框输入关键字时,JavaScript会把这些字符发送到服务器,然后服务器会返回一个搜索建议的列表。
2、iframe标签
-
可以使用前端的iframe标签来伪造一个ajax的样子,体验不用重新加载整个网页的情况。
-
编写一个frame.html 测试使用窗口显示网站
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>iframe测试体验页面无刷新</title> <script> function go(){ var url = document.getElementById("url").value; document.getElementById("iframe1").src=url; } </script> </head> <body> <div> <p>请输入地址:</p> <p> <input type="text" id="url" value="https://www.bilibili.com/"> <input type="button" value="提交" onclick="go()"> </p> </div> <div> <iframe id="iframe1" style="width:80%;height:500px"></iframe> </div> </body> </html>
-
测试界面
3、jQuery.ajax
-
概述
- 可以使用纯JS实现Ajax,在这里选择jQuery【是一个包含js 的大量函数(方法)的库】,方便学习和使用
- Ajax的核心是XMLHttpReques对象(XHR)。XHR为向服务器发送请求和解析服务器响应提供了接口。能够以异步方式从服务器获取新数据。
- jQuery提供多个与AJAX有关的方法。
- 通过jQuery AJAX方法,能够使用HTTP Get和 HTTP Post 从远程服务器上请求文本、HTML、XML或JSON–同时能够把这些外部数据直接载入网页的被选元素中。
- jQuery 不是生产者,而是搬运工。
- jQuery Ajax本质就是XMLHttpRequest,对它进行了封装,方便调用
-
jQuery.ajax(…),部分参数
url:请求地址【*】 type:请求方式,GET.POST ( 1.9.0之后用method) headers:请求头 data:要发送的数据【*】 async:是否异步 timeout:设置请求超时时间(毫秒) beforesend:发送请求前执行的函数(全局) complete:完成之后执行的回调函数(全局) success:成功之后执行的回调函数(全局)【*】 error:失败之后执行的回调函数(全局)【*】 accepts:通过请求头发送给服务器,告诉服务器当前客户端课接受的数据类型 dataType:将服务器端返回的数据转换成指定类型 "xml":将服务器端返回的内容转换成xml格式 "text":将服务器端返回的内容转换成普通文本格式 "json" :将服务器端返回的内容转换成相应的avascript对象
4、简单示例
-
环境搭建详情请见 SpringMVC完整笔记
-
示例一:输入框失去焦点的时候,发起一个请求(携带信息)到后端判断,并返回结果到前端
-
AjaxController类
@RestController public class AjaxController { @RequestMapping("/a1") public void a1(String name, HttpServletResponse response) throws IOException { System.out.println("a1:param=>"+name); if("ping".equals(name)){ response.getWriter().print("true"); }else{ response.getWriter().print("false"); } } }
-
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> <script src="/static/js/jquery-3.4.1.js"></script> <script> function a(){ $.post({ url:"${pageContext.request.contextPath}/a1", data:{"name":$("#username").val()}, success:function (data,status){ alert(data); //console.log("data="+data); //console.log("status="+status); }, }) } </script> </head> <body> <%--失去焦点的时候,发起一个请求(携带信息)到后台--%> 用户名: <input type="text" id="username" οnblur="a()"> </body> </html>
-
测试界面
-
-
示例二:Ajax异步加载数据(由jQuery.ajax获取后端数据并显示到页面)
-
实体类:User
public class User { private String name; private int age; private String sex; public User() { } public User(String name, int age, String sex) { this.name = name; this.age = age; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
-
AjaxController类
@RequestMapping("/a2") public List<User> a2(){ ArrayList<User> userList = new ArrayList<>(); //添加数据 userList.add(new User("张三",20,"男")); userList.add(new User("李四",20,"女")); userList.add(new User("王五",20,"男")); return userList; }
-
ajaxtest.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> <script src="static/js/jquery-3.4.1.js"></script> <script> $(function(){ $("#btn").click(function (){ /* $.post(url,param[可以省略],success) */ $.post("${pageContext.request.contextPath}/a2",function (data){ //console.log(data); var html=""; for (let 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> </head> <body> <input type="button" value="加载数据" id="btn"> <table> <tr> <td>姓名</td> <td>年龄</td> <td>性别</td> </tr> <tbody id="content" > </tbody> </table> </body> </html>
-
5、Ajax验证用户名密码
-
将输入的用户名和密码送到后端判断,将判断结构返回到前端显示
-
AjaxController类
@RequestMapping("/a3") public String a3(String name ,String pwd){ String msg = ""; if(name!=null){ //admin 从数据库中查 if("admin".equals(name)){ msg = "OK"; }else{ msg = "用户名错误"; } } if(pwd!=null){ //123456 从数据库中查 if("123456".equals(pwd)){ msg = "OK"; }else{ msg = "密码错误"; } } return msg; }
-
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>登录</title> <script src="${pageContext.request.contextPath}/static/js/jquery-3.4.1.js"></script> <script> function a1(){ $.post({ url:"${pageContext.request.contextPath}/a3", data:{"name":$("#name").val()}, success:function(data){ //console.log(data) //alert(data); if(data.toString()==='OK'){ $("#userInfo").css("color","green"); }else{ $("#userInfo").css("color","red"); } $("#userInfo").html(data); } }) } function a2(){ $.post({ url:"${pageContext.request.contextPath}/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" οnblur="a1()"> <span id="userInfo"></span> </p> <p> 密 码:<input type="password" id="pwd" οnblur="a2()"> <span id="pwdInfo"></span> </p> </body> </html>
-
测试界面