AJAX
1.概念:ASynchronous JavaScript And Xml 异步的JavaScript 和 Xml,无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。最终目的:提高用户体验。
--异步和同步:客户端和服务器端相互通信的基础上来讲
同步-客户端必须等服务器端的响应。在等待的期间客户端不能做其他操作
异步-客户端不须等服务器端的响应。在服务器处理请求的过程中,客户端可以进行其他操作
2.实现方式:
-
原生的js实现方式(了解)
服务器端代码:
package edu.xalead; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "AjaxServlet",urlPatterns = "/ajaxServlet") public class AjaxServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.获取请求参数 String username = request.getParameter("username"); //处理业务逻辑,会耗时,模拟 try { Thread.sleep(5000);//睡5s } catch (InterruptedException e) { e.printStackTrace(); } //2.打印username System.out.println(username); //3.响应 response.getWriter().write("hello :"+username); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } }
客户端代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input type="button" value="发送异步请求" onclick="fun();"> <input> </body> <script type="text/javascript"> function fun() { //实现异步请求 var xmlhttp; if(window.XMLHttpRequest){ xmlhttp = new XMLHttpRequest(); }else{ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } //2.建立链接 /** * 三个参数: * 请求方法:GET POST * -get方式请求参数在url后拼接,send方法为空参 * -post 在send中定义参数 * 请求路径url * 同步或异步,true为异步 */ xmlhttp.open("GET","ajaxServlet?username=tom",true); //3.发送请求 xmlhttp.send(); //4.处理服务器的响应结果 //获取方式 xmlhttp.responseText //什么是否获取?服务器响应成功后获取 //当xmlhttp对象状态盖面时,触发事件 xmlhttp.onreadystatechange=function () { //判断就绪状态是否为4,再判断响应状态码是否为200及相应成功 if(xmlhttp.readyState == 4 && xmlhttp.status==200){ //获取服务器响应结果 var responseText=xmlhttp.responseText; alert(responseText); } } } </script> </html>
-
JQeury实现方式
- $.ajax()
- 语法:$.ajax({key,value})
客户端代码:服务器端与上面原生实现的代码一致
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input type="button" value="发送异步请求" onclick="fun();"> <input> </body> <script src="js/jquery-3.4.1.min.js"></script> <script type="text/javascript"> function fun() { //使用$.ajax()发送异步请求 $.ajax({ url: "ajaxServlet",//请求路径 type: "POST",//请求方式 // data:"username=jack&age=23",//携带参数 data:{"username":"jack","age":23},//第二种格式 success:function (data) { alert(data); },//响应成功后的回调函数 error:function () { alert("出错啦..."); },//表示请求响应出现错误 dataType:"text"//设置接受到的响应数据的格式 }); } </script> </html>
-
$.get() :发送get请求
-
语法 :$.get(url,[data],[callback],[type])
-参数:
-url:请求路径
-data:请求参数
-callback:回调函数
-type:响应结果的类型
-
客户端代码:服务器端与上面原生实现的代码一致
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input type="button" value="发送异步请求" onclick="fun();"> <input> </body> <script src="js/jquery-3.4.1.min.js"></script> <script type="text/javascript"> function fun() { //使用$.get()发送异步请求 $.get("ajaxServlet", {username:"rose"}, function (data){ alert(data) }, "text"); } </script> </html>
3. $.post():发送post请求
客户端代码:服务器端与上面原生实现的代码一致
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input type="button" value="发送异步请求" onclick="fun();"> <input> </body> <script src="js/jquery-3.4.1.min.js"></script> <script type="text/javascript"> function fun() { //使用$.get()发送异步请求 $.post("ajaxServlet", {username:"haha"}, function (data){ alert(data) }, "text"); } </script> </html>
- $.ajax()