2.11 ajax
- 同步异步请求模式示意图


1.原生ajax
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<input id="mytext" type="text" >
<input type="button" value="发送异步请求" onclick="mySubmit()"/>
<span id="showres"></span>
</body>
<script>
function mySubmit(){
var xmlhttp;
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
}
else{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange= function(){
if(xmlhttp.status==200&&xmlhttp.readyState == 4){
console.log(xmlhttp.responseText);
var myresp = xmlhttp.responseText;
document.getElementById("showres").innerHTML=myresp;
}
}
xmlhttp.open("POST","testajax",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("mytext="+document.getElementById("mytext").value);
}
</script>
</html>
2.1 jquery中的ajax
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
<script src="js/jquery-3.5.1.min.js"></script>
<script>
$(function(){
$("#ajaxSubmitBtn").click(function(){
$.get( "testajax",
{"mytext":$("#mytext").val()},
function(data){
console.log(data);
$("#showres").html(data);
},
"text")
})
})
</script>
</head>
<body>
<input id="mytext" type="text" >
<input id="ajaxSubmitBtn" type="button" value="发送异步请求" />
<span id="showres"></span>
</body>
<script>
function mySubmit(){
var xmlhttp;
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
}
else{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange= function(){
if(xmlhttp.status==200&&xmlhttp.readyState == 4){
console.log(xmlhttp.responseText);
var myresp = xmlhttp.responseText;
document.getElementById("showres").innerHTML=myresp;
}
}
xmlhttp.open("POST","testajax",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("mytext="+document.getElementById("mytext").value);
}
</script>
</html>
2.2示例1 (省市级联)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script src="js/jquery-3.5.1.min.js"></script>
<script>
$(function(){
$.ajax({
url:"area",
type:"post",
data:{"pid":0},
dataType:"json",
success:function(mydata){
console.log(mydata);
if(mydata.code == 10000){
$.each(mydata.data,function(i,d){
var mycontent = '<option value="'+d.areaId+'">'+d.areaName+'</option>';
$("#prov").append(mycontent);
})
}
}
})
$("#prov").change(function(){
var provid = $("#prov").val();
$("#city").html('<option value="" disabled selected>------请选择-------</option>');
$("#xian").html('<option value="" disabled selected>------请选择-------</option>');
$.post("area",{"pid":provid},function(mydata){
console.log(mydata);
if(mydata.code == 10000){
$.each(mydata.data,function(i,d){
var mycontent = '<option value="'+d.areaId+'">'+d.areaName+'</option>';
$("#city").append(mycontent);
})
}
},"json")
})
$("#city").change(function(){
var cityid = $("#city").val();
$("#xian").html('<option value="" disabled selected>------请选择-------</option>');
$.post("area",{"pid":cityid},function(mydata){
console.log(mydata);
if(mydata.code == 10000){
$.each(mydata.data,function(i,d){
var mycontent = '<option value="'+d.areaId+'">'+d.areaName+'</option>';
$("#xian").append(mycontent);
})
}
},"json")
})
})
</script>
</head>
<body>
<select id="prov">
<option value="" disabled selected>------请选择-------</option>
</select> 省
<select id="city">
<option value="" disabled selected>------请选择-------</option>
</select> 市
<select id="xian">
<option value="" disabled selected>------请选择-------</option>
</select> 县/区
</body>
</html>
2.3 示例2(登录)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
<script src="js/jquery-3.5.1.min.js"></script>
<script>
$(function(){
$("#username").change(function(){
$.post( "checkName",
{"username":$("#username").val()},
function(data){
console.log(data);
console.log(data.code);
$("#showres").html(data.message);
$("#showres").css("color",data.data);
},
"json")
})
})
</script>
</head>
<body>
用户名:<input id="username" type="text" >
<span id="showres"></span>
</body>
</html>
2.4示例3 (分页展示)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>Title</title>
<link rel="stylesheet" href="css/bootstrap.css">
<style>
td img{
width: 80px;
height: 80px;
}
</style>
<script src="js/jquery-3.5.1.min.js"></script>
<script>
var page = ${page};
var pageSize = ${pageSize};
var totalPage = ${totalPage};
$(function(){
initBtn();
$(".addCartBtn").click(function(){
var pid = $(this).attr("pid");
var pordid = "prod_"+pid;
var pnum = 1;
var ckarr = document.cookie.split("; ");
$.each(ckarr ,function(i,d){
var kv = d.split("=");
if(kv[0]==pordid){
var currentNum = parseInt(kv[1]);
pnum = currentNum+1;
}
})
document.cookie = pordid+"="+pnum+";path=/;expires="+new Date("2025-11-11 11:11:11");
})
$("#prevBtn").click(function(){
location.href="prod?page="+(page-1)+"&pageSize=2&prodId="+$("#prodId").val()+"&prodName="+$("#prodName").val();
})
$("#nextBtn").click(function(){
location.href="prod?page="+(page+1)+"&pageSize=2&prodId="+$("#prodId").val()+"&prodName="+$("#prodName").val();
})
})
function initBtn(){
if(page<=1){
$("#prevBtn").prop("disabled",true);
}
if(page>=totalPage){
$("#nextBtn").prop("disabled",true);
}
}
</script>
</head>
<body>
<form action="prod" method="post" class="form-inline">
<div class="form-group">
<label for="prodId">商品id</label>
<input type="text" class="form-control" id="prodId" name="prodId" value="${queryProd.prodId}" placeholder="351123">
</div>
<div class="form-group">
<label for="prodName">商品名称</label>
<input type="text" class="form-control" id="prodName" name="prodName" value="${queryProd.prodName}" placeholder="牙膏">
</div>
<button type="submit" class="btn btn-success">查询</button>
</form>
<table class="table">
<thead>
<tr><th>商品编号</th><th>商品名称</th><th>单价</th><th>描述信息</th><th>操作</th></tr>
</thead>
<tbody>
<c:forEach items="${listprd}" var="prod">
<tr><td>${prod.prodId}</td>
<td>${prod.prodName}
<img src="${pageContext.request.contextPath}/${prod.prodImg}">
</td>
<td>${prod.prodPrice}</td>
<td>${prod.prodDesc}</td>
<td><input type="button" pid="${prod.prodId}" class="btn btn-info addCartBtn" value="添加到购物车"></td>
</tr>
</c:forEach>
</tbody>
</table>
<%--
通过链接地址 把用户分页查询的参数拼接在用户要点击的url上
--%>
<%--<a class="btn btn-default" href="prod?page=1&pageSize=2">1</a>
<a class="btn btn-default" href="prod?page=2&pageSize=2">2</a>
<a class="btn btn-default" href="prod?page=3&pageSize=2">3</a>
<a class="btn btn-default" href="prod?page=4&pageSize=2">4</a>--%>
<%--<a class="btn btn-default" href="prod?page=${page-1}&pageSize=2">上一页</a>
<a class="btn btn-default" href="prod?page=${page+1}&pageSize=2">下一页</a>--%>
<input id="prevBtn" type="button" value="上一页" class="btn btn-default">
<input id="nextBtn" type="button" value="下一页" class="btn btn-default">
<span>总共 <span>${totalPage}</span> 页, 当前第 <span>${page}</span> 页, 每页显示 <span>${pageSize}</span> 条记录</span>
</body>
</html>