目录
ajax和Axios 异步框架
Ajax
概念
AJAX作用
1.1、AJAX 快速入门
XMLHttpRequest 对象方法
XMLHttpRequest 对象属性
onreadystatechange 属性
onload 属性
实例
AJAX实例:
使用AJAX验证用户名是否存在
Axios 异步框架
Axios 快速入门
1.引入 axios 的 js 文件
2.使用axios 发送请求,并获取响应结果
3.Axios 请求方式别名
ajax和Axios 异步框架
Ajax
概念
AJAX(Asynchronous JavaScript And XML):异步的 JavaScript 和 XML
AJAX作用
1、与服务器进行数据交换:通过AJAX可以给服务器发送请求,并获取服务器响应的数据
使用了AJAX和服务器进行通信,就可以使用 HTML+AJAX来替换JSP页面了
2、异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想、用户名是否可用校验,等等…
三个特点:
并行操作:浏览器与服务器是并行操作的,浏览器在工作的时候,服务器也可以工作。
后台发送:浏览器的请求是后台js发送给服务器的,js会创建单独的线程发送异步请求,这个线程不会影响浏览器的线程运行。
局部刷新:浏览器接收到结果以后进行页面局部刷新
1.1、AJAX 快速入门
参考网址:w3school 在线教程
1、编写AjaxServlet,并使用response输出字符串
2、创建 XMLHttpRequest 对象:用于和服务器交换数据
let xmlhttp = new XMLHttpRequest()
3、向服务器发送请求
xmlhttp.open("GET",“url");
xmlhttp.send();//发送请求
4、获取服务器响应数据
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
alert(xmlhttp.responseText);
}
}
XMLHttpRequest 对象方法
方法 | 描述 |
new XMLHttpRequest() | 创建新的 XMLHttpRequest 对象。 |
abort() | 取消当前请求。 |
getAllResponseHeaders() | 返回头部信息。 |
getResponseHeader() | 返回特定的头部信息。 |
open(method, url, async, user, psw) | 规定请求。method:请求类型 GET 或 POSTurl:文件位置async:true(异步)或 false(同步)user:可选的用户名psw:可选的密码 |
send() | 向服务器发送请求,用于 GET 请求。 |
send(string) | 向服务器发送请求,用于 POST 请求。 |
setRequestHeader() | 将标签/值对添加到要发送的标头。 |
XMLHttpRequest 对象属性
属性 | 描述 |
onload | 定义接收到(加载)请求时要调用的函数。 |
onreadystatechange | 定义当 readyState 属性发生变化时调用的函数。 |
readyState | 保存 XMLHttpRequest 的状态。0:请求未初始化1:服务器连接已建立2:请求已收到3:正在处理请求4:请求已完成且响应已就绪 |
responseText | 以字符串形式返回响应数据。 |
responseXML | 以 XML 数据返回响应数据。 |
status | 返回请求的状态号200: "OK"403: "Forbidden"404: "Not Found"如需完整列表请访问 Http 消息参考手册 |
statusText | 返回状态文本(比如 "OK" 或 "Not Found") |
onreadystatechange 属性
readyState
属性保存 XMLHttpRequest 的状态。
onreadystatechange
属性定义了一个回调函数,当 readyState 改变时执行该函数。
status
属性和 statusText
属性保存 XMLHttpRequest 对象的状态。
属性 | 描述 |
onreadystatechange | 定义当 readyState 属性改变时调用的函数。 |
readyState | 保存 XMLHttpRequest 的状态。0:请求未初始化1:服务器连接已建立2:请求已收到3:正在处理请求4:请求已完成且响应已就绪 |
status | 返回请求的状态号200: "OK"403: "Forbidden"404: "Not Found"如需完整列表请访问 Http 消息参考手册 |
statusText | 返回状态文本(比如 "OK" 或 "Not Found")。 |
onload 属性
使用 XMLHttpRequest 对象时,您可以定义一个回调函数,以便在请求收到答复时执行。
请在 XMLHttpRequest 对象的 onload
属性中定义该函数:
实例
xhttp.onload = function() {
document.getElementById("demo").innerHTML = this.responseText;
}
xhttp.open("GET", "ajax_info.txt");
xhttp.send();
案例:
Java代码
@WebServlet("/ajaxServlet")
public class Demo01AjaxServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 向浏览器响应字符串 hello ajax!
// 设置响应类型和编码,注:text/plain为纯文本类型
response.setCharacterEncoding("utf-8");
response.getWriter().write("你好,欢迎来到ajax家族");
}
}
html代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ajax入门</title>
</head>
<body>
<script>
// 1.创建核心对象
let xmlhttp =new XMLHttpRequest();
// 2.发送请求
xmlhttp.open("get","http://localhost:8080/ajax/ajaxServlet");
xmlhttp.send();
// 3.处理响应
xmlhttp.onreadystatechange = function (){
if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
alert(xmlhttp.responseText);
}
}
</script>
</body>
</html>
AJAX实例:
使用AJAX验证用户名是否存在
需求:在完成用户注册时,当用户名输入框失去焦点时,校验用户名是否在数据库已存在 服务器先不访问数据库,直接判断用户名,如果用户名为zhangsan,则表示用户已经存在,否则用户名可以注册使用。
java代码:
package com.itheima.web.servlet;
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("/selectUserServlet")
public class Demo02SelectUserServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 模拟注册,假设用户名为zhangsan表示用户存在
String username = request.getParameter("username");
boolean result = "zhangsan".equals(username);
// 设置响应类型和编码,注:text/plain为纯文本类型
response.setContentType("text/plain;charset=utf-8");
response.getWriter().write(""+result);
}
}
html代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>欢迎注册</title>
<link href="css/register.css" rel="stylesheet">
<script src="js/axios-0.18.0.js"></script>
</head>
<body>
<div class="form-div">
<div class="reg-content">
<h1>欢迎注册</h1>
<span>已有帐号?</span> <a href="login.html">登录</a>
</div>
<form id="reg-form" action="#" method="get">
<table>
<tr>
<td>用户名</td>
<td class="inputs">
<input name="username" type="text" id="username">
<br>
<span id="username_err" class="err_msg" style="display: none">用户名已存在</span>
</td>
</tr>
<tr>
<td>密码</td>
<td class="inputs">
<input name="password" type="password" id="password">
<br>
<span id="password_err" class="err_msg" style="display: none">密码格式有误</span>
</td>
</tr>
<tr>
<td>验证码</td>
<td class="inputs">
<input name="checkCode" type="text" id="checkCode">
<img src="imgs/a.jpg">
<a href="#" id="changeImg">看不清?</a>
</td>
</tr>
</table>
<div class="buttons">
<input value="注 册" type="submit" id="reg_btn">
</div>
<br class="clear">
</form>
</div>
<script>
document.getElementById("username").onblur = function () {
let username = document.getElementById("username").value;
let xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "selectUserServlet?username=" +username);
xmlhttp.send();
// onreadystatechange
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
if (xmlhttp.responseText == "true") {
document.getElementById("username_err").style.display = '';
} else {
document.getElementById("username_err").style.display = 'none';
}
}
}
}
</script>
</body>
</html>
Axios 异步框架
Axios 对原生的AJAX进行封装,简化书写 官网:Axios 中文文档 | Axios 中文网 | Axios 是一个基于 promise 的网络请求库,可以用于浏览器和 node.js
异步和框架之间的区别是:异步是一种编程模型,用于实现并发性,而框架是一组代码和库,用于实现特定的应用程序功能。异步编程可以在任何框架中使用,但是框架本身可能或可能不支持异步编程。
Axios 快速入门
1.引入 axios 的 js 文件
位置:G:\frontEndDev\工具&配置\2. axios\js\axios-0.18.0.js
<script src="js/axios-0.18.0.js"></script>
2.使用axios 发送请求,并获取响应结果
get请求
axios({ method:"get", url:"http://localhost:8080/ajax-demo1/aJAXDemo1?username=zhangsan"})
.then(function (resp) {
alert(resp.data);
}
)
post请求
axios({ method:"post", url:"http://localhost:8080/ajax-demo1/aJAXDemo1",
data:"username=zhangsan"})
.then(function (resp) { alert(resp.data);});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Axios入门</title>
</head>
<body>
<script src="js/axios-0.18.0.js"></script>
<script>
debugger
// 使用axios发送AJAX的GET请求
/* axios.get("axiosServlet?username=zhangsan")
.then(function (resp){
alert(resp.data)
});*/
// 使用axios发送AJAX的POST请求
axios({method:"POST",
url:"axiosServlet",
data:"username=zhangsan"})
.then(function (resp){
alert(resp.data);
});
</script>
</body>
</html>
3.Axios 请求方式别名
为了方便起见, Axios 已经为所有支持的请求方法提供了别名。
方法名 | 作用 |
get(url) | 发起GET方式请求 |
post(url,请求参数) | 发起POST方式请求 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Axios入门</title>
<script src="js/axios-0.18.0.js"></script>
</head>
<body>
<script>
// 使用axios发送AJAX的GET请求
/* axios({
method: "GET",
url: "http://localhost:8080/ajax-demo/axiosServlet?username=zhangsan"
}).then(function (resp) {
// resp.data: 响应数据
alert(resp.data);
});*/
// 使用axios发送AJAX的POST请求
axios({
method: "POST",
url: "http://localhost:8080/ajax-demo/axiosServlet",
data: "username=zhangsan"
}).then(function (resp) {
// resp.data: 响应数据
alert(resp.data);
});
</script>
</body>
</html>
案例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Axios入门</title>
<script src="js/axios-0.18.0.js"></script>
</head>
<body>
<script>
// 复制上一个案例的代码添加axios的别名请求方式
// 使用axios发送AJAX的GET请求
/* axios({
method: "GET",
url: "http://localhost:8080/ajax-demo/axiosServlet?username=zhangsan"
}).then(function (resp) {
// resp.data: 响应数据
alert(resp.data);
});*/
// axios.get(url): 直接发送get请求
/*axios.get("http://localhost:8080/ajax-demo/axiosServlet?username=zhangsan&password=666")
.then(function (resp) {
// resp.data: 响应数据
alert(resp.data);
});*/
// 使用axios发送AJAX的POST请求
/*axios({
method: "POST",
url: "http://localhost:8080/ajax-demo/axiosServlet",
data: "username=zhangsan"
}).then(function (resp) {
// resp.data: 响应数据
alert(resp.data);
});*/
// axios.post(url, 请求参数): 发送post请求
axios.post("http://localhost:8080/ajax-demo/axiosServlet", "username=zhangsan&password=123")
.then(function (resp) {
alert(resp.data);
});
</script>
</body>
</html>