一、Ajax:
1、Ajax 即“Asynchronous Javascript And XML“(异步 JavaScript 和 XML);
2、是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。
3、通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
二、Ajax同步和异步(普遍)的区别:
1、 同步处理:通过实践触发 ajax,请求服务器,在这个期间等待服务器处理请求, 在这个期间客户端不能做任何处理。当 ajax 执行完毕才会继续执行其他代码。
同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事。
2、异步处理:通过事件触发到 ajax,请求服务器,在这个期间无论服务器有没有响应,客户端的其他代码一样可以运行。
异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕同步需要等待返回结果才能继续,异步不必等待,一般需要监听异步的结果。
*ps:同步是在一条直线上的队列,异步不在一个队列上 各走各的
(判断用户名是否存在)
1、Servlet:
创建UserServlet:
package com.javaboy.ajax.servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public class UserServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username=req.getParameter("username"); //省略从dao层查询username的过程,假定数据库中含有admin用户 PrintWriter out= resp.getWriter();//输出流 //信息不会直接打印在浏览器上,信息会被xmlHttpRequest抓取 //true:该用户已存在 //false:该用户可注册 if ("admin".equals(username)){ System.out.println("此用户已存在"); out.write("true"); }else{ System.out.println("此用户可注册"); out.write("false"); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req,resp); } }
2、Ajax的实例应用:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>javascript ajax test</title>
</head>
<body>
用户名:<input type="text" name="username" value="" onblur="validateUsername()" id="username"><br/>
<script>
function validateUsername() {
var username=document.getElementById("username").value;
alert(username);
//ajax 纯javascript实现
//xmlHttpRequest 异步引擎
//1.创建xmlHttpRequst
var xmlHttpRequest=new XMLHttpRequest();
//2.建立连接 默认是异步
xmlHttpRequest.open("GET","userServlet?username="+username,true);
//3.发送请求
xmlHttpRequest.send();
//4.接受响应结果,并处理结果 该函数会自动触发
xmlHttpRequest.onreadystatechange=function () {
if(xmlHttpRequest.readyState==4 && xmlHttpRequest.status==200){
var result=xmlHttpRequest.responseText;
alert("result:"+result);
if(result=="true"){
alert("该用户已存在,请重新录入");
}else{
alert("该用户可注册");
}
}
}
}
</script>
</body>
</html>
*ps: 1、"GET":为要使用的HTTP方法 POST PUT DELETE等…… 2、"true":表示是否异步执行操作,默认为异步(true); 3、XMLHttpRequest 对象的三个重要的属性:
| 属性 | 描述 |
|---|---|
| onreadystatechange | 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。 |
| readyState |
存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。 · 0: (请求未初始化) send方法还没有被调用 · 1: (服务器连接已建立,加载中) 已调用了send方法,请求还在处理 · 2: (请求已接收, 已加载) send方法已完成,整个应答已接收 · 3: (请求处理中, 交互中) 正在解析应答 · 4: (请求已完成,且响应已就绪) 应答已经解析,准备好进行下一步处理。 |
| status | 200: "OK" 404: 未找到页面 |
4、当 readyState 等于 4 且状态为 200 时,表示响应已就绪
3、JQueryAjax的实例应用:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>javascript ajax test</title>
</head>
<body>
用户名:<input type="text" name="username" value="" onblur="validateUsername()" id="username"><span id="idSpan"></span><br/>
<script type="text/javascript" src="js/jquery-3.3.1.js"></script>
<script type="text/javascript">
function validateUsername() {
var username = $("#username").val();
$.ajax({
url: "userServlet",// 请求路径
type: "GET",//请求方式
dataType: "text",//设置接受到的响应数据的格式
data: "username=" + username,//请求参数 或{"username":"jack","age":23}
success: function (result) {
//alert("result:" + result);
if (result == "true") {
/* alert("该用户已存在,请重新录入");*/
$("#idSpan").html("该用户已存在,请重新录入").css("color","red");
} else {
// alert("该用户可注册");
$("#idSpan").html("该用户可注册").css("color","green");
}
},//响应成功后的回调函数
error: function () {
//500 404
alert("服务器内部错误!");
}//设置接受到的响应数据的格式
});
}
</script>
</body>
</html>