1、简介
Ajax(Asynchronous Javascript And XML)=异步的 javascript 和XML ,定制开发小程序使网页在不重新加载整定制开发小程序个页面的情况下,定制开发小程序对页面的局部进行刷新,定制开发小程序传统的网页(若不使用AJAX)定制开发小程序在打开页面时,定制开发小程序是需要加载出此页面所有的内容。Ajax是一种新的思想, 是与服务器交换数据并更新网页局部的艺术。
2、Ajax实现步骤js原生
-
使用JavaScript获取浏览器内置对象,Ajax的核心。
let xml=new XMLHttpRequest();
- 1
-
建立连接方式与请求内容:open()方法,有三个参数,第一个参数为请求方式,第二个参数为请求的路径,第三个参数为对请求是否为异步处理。
xml.open("get","queryUserInfo",true);
- 1
-
设置事件句柄,回调函数
xml.onreadystatechange=function(){ /* readyState ==0:request未初始化(调用open()之前) readyState ==1:request已提出(调用send()之前) readyState ==2:request已发送 readyState ==3:request正在处理中(服务器还未完成响应) readyState ==4:判断request已完成(可以访问服务器) status==200:判断request是否执行成功 status==404:表示“Not Found” */ if(xml.readyState==4&&xml.status==200){ }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
-
发送数据
xml.send(null);//以get方式提交,以post方式提交时,需要指定需要传送的参数
- 1
3、代码实现,js原生
前提,搭建maven项目,加载Tomcat,添加依赖。
-
pom.xml,添加依赖,将依赖添加到dependencies当中
<!--servlet依赖--><dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency><!--json依赖--><dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.75</version></dependency>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
-
user实体类
package com.ajax.model;public class User { private int userId; private String userName; private String userSex; private int userAge; private String userTel; private String userAddress; public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserSex() { return userSex; } public void setUserSex(String userSex) { this.userSex = userSex; } public int getUserAge() { return userAge; } public void setUserAge(int userAge) { this.userAge = userAge; } public String getUserTel() { return userTel; } public void setUserTel(String userTel) { this.userTel = userTel; } public String getUserAddress() { return userAddress; } public void setUserAddress(String userAddress) { this.userAddress = userAddress; }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
-
servlet,查询所有user信息(queryUserInfo)
package com.ajax.servlet;import com.ajax.model.User;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;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;import java.io.PrintWriter;import java.util.ArrayList;import java.util.List;@WebServlet("/queryUserInfo")public class QueryUserInfo extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置数据的格式为json response.setContentType("json/application;charset=utf-8"); List<User> list=new ArrayList<>(); //添加user信息 for(int i = 1;i < 10;i++){ User user=new User(); user.setUserId(100 + i); user.setUserName("张三"+i); user.setUserSex(i % 2 == 0 ? "男" : "女"); user.setUserAge(18 + i); user.setUserTel("1809233094" + i); user.setUserAddress("西安"); list.add(user); } //转为json数组 JSONArray json =(JSONArray) JSONObject.toJSON(list); //响应给浏览器 PrintWriter pw =response.getWriter(); pw.print(json); System.out.println(json); } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
-
index.html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>AjaxDemo</title><!-- 小图标--> <link rel="shortcut icon" href="img/fire.png" type="image/x-icon"> <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" type="text/css"> <script src="bootstrap/js/bootstrap.js" type="text/javascript"></script> <!--导入jQuery包--> <script src="./js/jquery-3.5.1.min.js"></script> <script src="./js/show.js"></script> <style> .box{ width: 80%; margin: 15vh auto; } table{ text-align: center; } table th{ text-align: center; } </style></head><body><div class="box"> <table class="table table-striped table-bordered table-hover table-condensed"> <thead> <tr> <th>ID</th> <th>用户名</th> <th>性别</th> <th>年龄</th> <th>电话</th> <th>城市</th> </tr> </thead> <tbody id="userData"> <!--存放数据--> </tbody> </table></div></body></html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
-
js原生,外部引用 show.js
// 使用ajax动态获取表格数据window.onload = function (){ //1创建XMLHttpRequest对象 let xml=new XMLHttpRequest(); //建立连接 xml.open("get","queryUserInfo",true); //设置回调函数 xml.onreadystatechange=function(){ /* readyState ==4:判断request已完成(可以访问服务器) status==200:判断request是否执行成功 */ if(xml.readyState==4&&xml.status==200){ //获取到响应数据 let vals = xml.responseText; //控制台打印 console.log(vals); //转为json格式 let jsonArr=eval(vals); //tbody填入数据 let temp = ''; //获取tbody标签 let tbody=document.getElementById("userData"); for(let user of jsonArr){ temp += '<tr>' + '<td>' + user.userId + '</td>' + '<td>' + user.userName + '</td>' + '<td>' + user.userSex + '</td>' + '<td>' + user.userAge + '</td>' + '<td>' + user.userTel + '</td>' + '<td>' + user.userAddress + '</td>' + '</tr>'; } tbody.innerHTML = temp; } } //发送数据 xml.send(null);}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
4、实现
1)前言:jQuery入口函数的几种书写方式
- $(document).ready(function () { alert(“测试1”); });
- jQuery(document).ready(function () { alert(“测试2”); });
- $(function () { alert(“测试3”); });
- jQuery(function () { alert(“测试4”); });
2)jQuery经过封装,将ajax封装了,使用起来就比较简单了$.ajax()
返回其创建的XMLHttpRequest对象。
常用参数
- url : 请求地址
type : 请求方式类型, 默认是"get", 常用的还有post
dataType : 设置返回的数据格式,如html, xml, text, json
data : 设置发送给服务器的数据
success : 设置请求成功后的回调函数( 第二种方式用done )
error : 设置请求失败后的回调函数, ( 第二种方式用fail )
-
$.ajax()写法一
$(document).ready(function (){ //获取tbody let userData = $("#userData"); let temp = ''; $.ajax({ //请求路径servlet url: "queryUserInfo", type: "get", dataType: "json", async: true,//是否异步 //请求成功 success: function (msg){ let users = msg; userData.empty();//清空 for (let i = 0; i < users.length; i++) { temp += '<tr>' + '<td>' + users[i].userId + '</td>' + '<td>' + users[i].userName + '</td>' + '<td>' + users[i].userSex + '</td>' + '<td>' + users[i].userAge + '</td>' + '<td>' + users[i].userTel + '</td>' + '<td>' + users[i].userAddress + '</td>' + '</tr>'; } userData.append(temp); }, //请求失败 error: function (e) { alert("request failed !") } })});
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
-
$.ajax()写法二
jQuery(document).ready(function () { let userData = $("#userData"); let temp = ''; $.ajax({ url: "queryUserInfo", type: "get", dataType: "json", async: true,//是否异步 }).done(function (msg){ console.log(JSON.stringify(msg)) let users = msg; userData.empty();//清空 for (let user of users) { temp += '<tr>' + '<td>' + user.userId + '</td>' + '<td>' + user.userName + '</td>' + '<td>' + user.userSex + '</td>' + '<td>' + user.userAge + '</td>' + '<td>' + user.userTel + '</td>' + '<td>' + user.userAddress + '</td>' + '</tr>'; } userData.append(temp); }).fail(function (e){ alert("request failed !") })});
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
-
$.post()写法:
语法:$.post(url,data,callback,dataType)
- url(必须):规定把请求发送到哪个 URL。
- data(可选):发送给后台的数据,以key/value形式{a:value1,b:value2},即json格式
- callback(可选):请求成功后的回调函数。
- dataType(可选):规定预期的服务器响应的数据类型。默认执行智能判断(xml、json、script 或 html)
$(function () { $.post("queryUserInfo",function (msg){ console.log(JSON.stringify(msg)) $('#userData').empty(); let temp = ''; for (let user of msg) { temp += '<tr>' + '<td>' + user.userId + '</td>' + '<td>' + user.userName + '</td>' + '<td>' + user.userSex + '</td>' + '<td>' + user.userAge + '</td>' + '<td>' + user.userTel + '</td>' + '<td>' + user.userAddress + '</td>' + '</tr>'; } $('#userData').append(temp); })})
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
-
jQuery.get()与上面的$.post()写法相同,只是不一样的请求方式
语法:$.get(URL,callback);
区别:
- GET - 从指定的资源请求数据
- POST - 向指定的资源提交要处理的数据
GET 基本上用于从服务器获得(取回)数据。注释:GET 方法可能返回缓存数据。
POST 也可用于从服务器获取数据。不过,POST 方法不会缓存数据,并且常用于连同请求一起发送数据。