AJAX请求的使用教程
2024-01-18 本文已影响0人
Java_Evan
什么是AJAX?
AJAX 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。
Ajax 是一种浏览器通过 js 异步发起请求,局部更新页面的技术。
Ajax 请求的局部更新,浏览器地址栏不会发生变化, 局部更新不会舍弃原来页面的内容。
异步与同步的区别?
异步:异步是非阻塞模式,发送方不等待接收方的响应,继续向下执行;异步以字符作为传输单位。
同步:同步是阻塞模式,发送方要等待接收方的响应,才能向下执行;同步以数据库作为传输单位。
比如:异步模式下,多线程执行,不需要等待其它线程的处理,只关注自己线程的执行过程;而同步模式下,多线程执行,需要等待其它线程一起执行完操作,才能继续执行下一步。
原生JavaScript方式的AJAX的请求
自定义类,通过反射获取请求方式
public abstract class BaseServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 解决post乱码问题,设置请求的参数字符集为UTf-8
request.setCharacterEncoding("UTF-8");
// 解决响应乱码问题,设置响应的参数字符集为UTF-8
response.setContentType("text/html; charset=UTF-8");
// action参数就可以用来判断是当前用户模块的哪一个操作。
String action = request.getParameter("action");
// 定义一个Method方法对象
Method actionMethod;
try {
// 通过反射获取到与action字符串对应的操作方法
actionMethod = getClass().getDeclaredMethod(action, HttpServletRequest.class,
HttpServletResponse.class);
// System.out.println(actionMethod);
// 调用Method对象的invoke函数执行方法
actionMethod.invoke(this, request, response);
} catch (NoSuchMethodException | SecurityException | IllegalAccessException
| IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
}
}
发送get请求
<!--
Author:lisong
CreateTime:2023-08-02 20:10 星期三
-->
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>AJAX</title>
</head>
<body>
<button onclick="ajaxRequest()">ajax-request</button>
<div id="div01"></div>
</body>
<script type="text/javascript">
//使用javaScript发起AJAX请求,访问服务器AjaxServlet中的javaScriptAjax
function ajaxRequest() {
//1.创建XMLHttpRequest对象
var xmlHttpRequest = new XMLHttpRequest();
//2.调用open方法设置请求参数
//参数1:请求方式,参数2:请求地址URL,参数3:是否异步,true表示异步,false表示同步
xmlHttpRequest.open("GET","http://localhost:8080/day06_json/ajaxServlet?action=javaScriptAjax",true);
//3.在send方法前绑定onreadystatechange事件,处理请求完成后的操作
xmlHttpRequest.onreadystatechange = function () {
if (xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200) {
alert(111);
//将响应的json字符串转换为json对象
const jsonObj = JSON.parse(xmlHttpRequest.responseText);
//将响应的数据显示在HTML页面中
document.getElementById("div01").innerHTML = "姓名:" + jsonObj.name + ",编号:" + jsonObj.id;
}
}
//4.调用send()方法发送请求
xmlHttpRequest.send();
}
</script>
</html>
自定义Servlet程序
public class AjaxServlet extends BaseServlet {
protected void javaScriptAjax(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Ajax请求收到...");
var person = new Person("李四", 1000001L);
//创建Gson对象实例
var gson = new Gson();
//将Person对象转换为json字符串
String jsonStr = gson.toJson(person);
System.out.println(jsonStr);
}
}
web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>ajaxServlet</servlet-name>
<servlet-class>com.evan.java.AjaxServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ajaxServlet</servlet-name>
<url-pattern>/ajaxServlet</url-pattern>
</servlet-mapping>
</web-app>
jQuery 中的 AJAX 请求
JQuery是对JavaScript的封装,简化了语法。
[JQuery.js的下载地址]
https://www.alipan.com/s/Rpemu31MVti
提取码: rp18
$.ajax 方法
参数 | 描述 |
---|---|
url | 表示请求的地址 |
type | 表示请求的类型GET或POST请求 |
data | 表示发送给服务器的数据,格式有两种:1. name=value&name=value;2. {key:value} |
success | 请求成功,响应的回调函数 |
dataType | 响应的数据类型,常用数据类型:text表示纯文本,xml表示xml文件,json表示json对象 |
protected void jQuerytAjax(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("JQuery的Ajax请求收到...");
var person = new Person("张三", 1000001L);
//创建Gson对象实例
var gson = new Gson();
//将Person对象转换为json字符串
String jsonStr = gson.toJson(person);
System.out.println(jsonStr);
}
<!--
Author:lisong
CreateTime:2023-08-02 22:38 星期三
-->
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>JQuery_AJAX</title>
<script type="text/javascript" src="js/jquery-1.7.2.js"></script>
</head>
<body>
<button id="ajaxBtu">ajax-request</button>
<div id="div01"></div>
</body>
<script type="text/javascript">
$(function (){
//ajax请求
$("#ajaxBtu").click(function (){
$.ajax({
url : "http://localhost:8080/day06_json/ajaxServlet",
data : "action=jQuerytAjax",
type : "GET",
success : function (data) {
// alert(data);
// var jsonStr = JSON.parse(data);
// console.log("name:" + jsonStr.name + ",编号:" + jsonStr.id);
console.log(data.name + "," + data.id);
},
dataType : "json"
});
});
});
</script>
</html>
.post 方法
参数方法 | 描述 |
---|---|
url | 请求的url地址 |
data | 发送的数据 |
callback | 成功的回调函数 |
type | 返回的数据类型 |
<script type="text/javascript">
$(function (){
//ajax--get请求
$("#ajaxBtu").click(function (){
$.get("http://localhost:8080/day06_json/ajaxServlet","action=jQuerytAjax",function (data) { console.log(data.name + "," + data.id);
},"json");
});
</script>
<script type="text/javascript">
$(function (){
//ajax--get请求
$("#ajaxBtu").click(function (){
$.post("http://localhost:8080/day06_json/ajaxServlet","action=jQuerytAjax",function (data) { console.log(data.name + "," + data.id);
},"json");
});
</script>
$.getJSON 方法
参数方法 | 描述 |
---|---|
url | 请求的url地址 |
data | 发送给服务器的数据 |
callback | 成功的回调函数 |
<script type="text/javascript">
// ajax--getJson 请求
$("#getJSONBtn").click(function(){
$.getJSON("http://localhost:8080/day06_json/ajaxServlet","action=jQueryGetJSON",function
(data) {
$("#msg").html(" getJSON 编号:" + data.id + " , 姓名:" + data.name);
});
});
</script>
serialize() 表单序列化
serialize()可以把表单中所有表单项的内容都获取到,并以 name=value&name=value的形式进行拼接。
<script type="text/javascript">
// ajax 请求
$("#submit").click(function(){
// 将表单参数序列化
$.getJSON("http://localhost:8080/day06_json/ajaxServlet","action=jQuerySerialize&" + $("#form01").serialize(),function (data) {
$("#msg").html(" Serialize 编号:" + data.id + " , 姓名:" + data.name);
});
});
</script>