Ajax:异步js和xml
异步刷新:如果网页中某一个地方需要修改,异步刷新可以使:只刷新需要修改的地方,而页面其他地方保持不变
实现方法
1.js:
XMLHttpRequest对象
XMLHttpRequest对象的方法:
open(方法名(提交方式get/post),服务器地址,true):与服务器建立连接(true代表异步刷新,false为同步)
send():
get: send(null)
post: send(参数值)
setRequestHeader(header,value):
get:不需要设置此方法
post:需要设置:
a.如果请求元素包含了文件上传
setRequestHeader(“content-Type”,“multiparty/form-data”)
b.不包含文件上传
setRequestHeader(“content-Type”,“application/x-www-form-urlencoded”)
XMLHttpRequest对象的属性值:
readystate:请求状态 只有状态是4的时候代表请求完毕
status:响应状态:
onreadytatechange: 回调函数
responseText: 相应格式是String格式
responseXML: 相应格式是xml格式
程序功能:
用户输入一个电话,如果为123456789则显示已经注册,其他则提示注册成功(post方法)
代码演示
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charst=UTF-8">
<script type="text/javascript">
function register() {
var mobile=document.getElementById("mobile").value;
//通过Ajax异步方式请求服务端
xmlHttpRequest=new XMLHttpRequest();
//设置xmlHttpResquest对象的回调函数
xmlHttpRequest.onreadystatechange=callBack; //方法的引用,不用写括号
xmlHttpRequest.open("post","MobileServlet",true);
//设置post方式的头信息
xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttpRequest.send("mobile="+mobile);
}
//定义回调函数(接受服务器的返回值)
function callBack() {
if(xmlHttpRequest.readyState==4&&xmlHttpRequest.status==200){
//接受服务器返回的数据
var data=xmlHttpRequest.responseText; //服务端返回值为String格式
if(data=="true"){
alert("此号码已存在,请更换")
}else {
alert("注册成功")
}
}
}
</script>
<title>$Title$</title>
</head>
<body>
<input id="mobile"/>
<br/>
<input type="button" value="注册" onclick="register()"/>
</body>
</html>
MobileServlet.java
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;
@WebServlet("/MobileServlet")
public class MobileServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding( "utf-8" );
resp.setCharacterEncoding( "utf-8" );
resp.setContentType( "text/html;charset=UTF-8" );
String mobile=req.getParameter( "mobile" );
PrintWriter out=resp.getWriter();
if("123456789".equals(mobile)){
out.write( "true" ); //servlet以输出流的方式,将信息返回给客户端
}else {
out.write( "false" );
}
out.close(); //关闭输出流
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet( req,resp );
}
}
get方式:(修改index.jsp的第13行)
xmlHttpRequest.open("get","MobileServlet?mobile="+mobile,true);
xmlHttpRequest.send(null);
2.jQuery:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charst=UTF-8">
<script type="text/javascript" src="js/jquery-3.5.0.js"></script>
<script type="text/javascript">
function register() {
var $mobile=$("#mobile").val();
$.ajax({
url:"MobileServlet",
请求方式:"post",
data:"mobile="+$mobile,
success:function(result){
if(result=="true"){
alert("已存在!注册失败!");
}else{
alert("注册成功!");
}
},
error:function(){
alert("系统异常!");
}
})
}
</script>
<title>$Title$</title>
</head>
<body>
<input id="mobile"/>
<br/>
<input type="button" value="注册" onclick="register()"/>
</body>
</html>
补充:
get方法
$.get(
服务器地址:
请求数据:
function(result){
},
预期返回值类型(String\xml)
);
post方法
$.post(
服务器地址:
请求数据:
function(result){
},
预期返回值类型(String\xml)
);
load方法
$("").load(
服务器地址,
请求数据,
function(result){
}
)
load方法代码演示:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charst=UTF-8">
<script type="text/javascript" src="js/jquery-3.5.0.js"></script>
<script type="text/javascript">
function register() {
var $mobile=$("#mobile").val();
$("#tip").load(
"MobileServlet",
"mobile="+$mobile
)
}
</script>
<title>$Title$</title>
</head>
<body>
<input id="mobile"/>
<br/>
<input type="button" value="注册" onclick="register()"/>
<span id="tip"></span>
</body>
</html>
*JSON方式:(返回值是一个JSON格式的数据)
$.getJSON(
)
代码演示:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charst=UTF-8">
<script type="text/javascript" src="js/jquery-3.5.0.js"></script>
<script type="text/javascript">
function register() {
var $mobile=$("#mobile").val();
$.getJSON(
"MobileServlet",
{"mobile":$mobile},
function (result) {
if(result.msg=="true"){
alert("已存在")
}else{
alert("注册成功")
}
}
)
}
</script>
<title>$Title$</title>
</head>
<body>
<input id="mobile"/>
<br/>
<input type="button" value="注册" onclick="register()"/>
<span id="tip"></span>
</body>
</html>
由于返回的是JSON格式,所以不能用String和JSON比较,所以需要修改MobileServlet的内容,使返回值变成JSON类型
if("13026373922".equals(mobile)){
out.write( "{\"msg\":\"true\"}" );
}else {
out.write( "{\"msg\":\"false\"}" );
}