AJAX
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>学习AJAX</title>
</head>
<body>
<script type="text/javascript">
var xhr = new XMLHttpRequest();
// open(请求方式,服务端的访问地址,异步还是同步);
open("get", "loginServlet", true);
// send():使用异步对象发送请求
send();
// XMLHttpRequest属性
// (1)readyState -->请求的状态
//0:表示创建异步对象时
//1:表示初始异步对象的请求参数.执行open()方法
//2:使用send()方法发送请求
//3:使用异步对象从服务器接受了数据
//4:异步对象接收了数据,并在异步对象内部处理完成后
// (2)status -->网络的状态,和Http的状态码对应
// 200:请求成功
// 404:服务器资源没有找到
// 500:服务器内部代码有错误
// (3)responseText -->表示服务器端返回的数据
// 例如
var data = xhr.responseText;
//拿到了数据,接着就可以数据展示了,即操作dom
</script>
</body>
</html>
XMLHttpRequest的使用方法
var xhr = new XMLHttpRequest(); //js实例化XMLHttpRequest对象
xhr.onreadystatechange = function() { //给异步对象绑定事件,事件名--> onreadystatechange
if (xhr.readyState == 4 && xhr.status == 200) {
// 从服务器获取了数据,更新当前页面的dom对象,完成处理请求
var data = xhr.responseText;
//更新dom
document.getElementById("#myselect").innerHTML = data;
}
}
//初始化请求的参数,执行open()函数
xhr.open("GET", "loginServlet", true);
//发送请求
xhr.send();
AJAX实例
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<%-- <title>全局是实现计算bmi</title>--%>
<title>使用AJAX实现计算bmi</title>
</head>
<body>
<%--<div align="center">--%>
<%-- <p>计算bmi</p>--%>
<%-- <form action="bmiServlet" method="get">--%>
<%-- 姓名:<input type="text" name="name"> <br>--%>
<%-- 体重:<input type="text" name="w"> <br>--%>
<%-- 身高:<input type="text" name="h"> <br>--%>
<%-- 操作:<input type="submit" value="计算bmi"> <br>--%>
<%-- </form>--%>
<%--</div>--%>
<%--<div align="center">--%>
<%-- <p>计算bmi</p>--%>
<%-- <form action="bmi2Servlet" method="get">--%>
<%-- 姓名:<input type="text" name="name"> <br>--%>
<%-- 体重:<input type="text" name="w"> <br>--%>
<%-- 身高:<input type="text" name="h"> <br>--%>
<%-- 操作:<input type="submit" value="计算bmi"> <br>--%>
<%-- </form>--%>
<%--</div>--%>
<div align="center">
<p>ajax请求和form无关,有无form都可以</p>
<table>
<tr>
<td>姓名:</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>体重:</td>
<td><input type="text" name="w"></td>
</tr>
<tr>
<td>身高:</td>
<td><input type="text" name="h"></td>
</tr>
<tr>
<td>操作:</td>
<td><input type="button" value="ajax计算bmi" onclick="doAjax()"></td>
</tr>
</table>
</div>
<script type="application/javascript">
function doAjax() {
// alert("btn click");
console.log("btn is clicked");
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
console.log("onreadystatechange is using readystate=" + xhr.readyState + " status=" + xhr.status);
if (xhr.readyState == 4 && xhr.status == 200) {
//开发人员处理服务器返回的数据,更新dom对象
}
}
xhr.open("get", "", true);
xhr.send();
}
</script>
</body>
</html>
具体操作
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<%-- <title>全局是实现计算bmi</title>--%>
<title>使用AJAX实现计算bmi</title>
</head>
<body>
<%--<div align="center">--%>
<%-- <p>计算bmi</p>--%>
<%-- <form action="bmiServlet" method="get">--%>
<%-- 姓名:<input type="text" name="name"> <br>--%>
<%-- 体重:<input type="text" name="w"> <br>--%>
<%-- 身高:<input type="text" name="h"> <br>--%>
<%-- 操作:<input type="submit" value="计算bmi"> <br>--%>
<%-- </form>--%>
<%--</div>--%>
<%--<div align="center">--%>
<%-- <p>计算bmi</p>--%>
<%-- <form action="bmi2Servlet" method="get">--%>
<%-- 姓名:<input type="text" name="name"> <br>--%>
<%-- 体重:<input type="text" name="w"> <br>--%>
<%-- 身高:<input type="text" name="h"> <br>--%>
<%-- 操作:<input type="submit" value="计算bmi"> <br>--%>
<%-- </form>--%>
<%--</div>--%>
<div align="center">
<p>ajax请求和form无关,有无form都可以</p>
<table>
<tr>
<td>姓名:</td>
<td><input type="text" name="name" id="name"></td>
</tr>
<tr>
<td>体重:</td>
<td><input type="text" name="w" id="w"></td>
</tr>
<tr>
<td>身高:</td>
<td><input type="text" name="h" id="h"></td>
</tr>
<tr>
<td>操作:</td>
<td><input type="button" value="ajax计算bmi" onclick="doAjax()"></td>
</tr>
</table>
<br>
<div id="myDiv">等待更新数据</div>
</div>
<script type="application/javascript">
function doAjax() {
// alert("btn click");
console.log("btn is clicked");
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
console.log("onreadystatechange is using readystate=" + xhr.readyState + " status=" + xhr.status);
if (xhr.readyState == 4 && xhr.status == 200) {
//开发人员处理服务器返回的数据,更新dom对象
//接收数据
var data = xhr.responseText;
// alert("data="+data);
//更新dom对象
document.getElementById("myDiv").innerHTML = data;
}
}
//初始化数据
var name = document.getElementById("name").value;
var h = document.getElementById("h").value;
var w = document.getElementById("w").value;
var param="bmiAjax?name="+name+"&w="+w+"&h="+h;
// xhr.open("get", "bmiAjax", true);
xhr.open("get", param, true);
xhr.send();
}
</script>
</body>
</html>
注册Servlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="4.0"
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"
metadata-complete="true">
<servlet>
<servlet-name>AjaxServlet</servlet-name>
<servlet-class>com.my.controller.AjaxServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AjaxServlet</servlet-name>
<url-pattern>/bmiAjax</url-pattern>
</servlet-mapping>
</web-app>
Servlet
package com.my.controller; /**
* @project_name
* @author Vis.Yang
* @date 2021-11-20 11:05
*/
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
public class AjaxServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("接收到了ajax请求");
//接受请求参数
String strName = request.getParameter("name");
String strW = request.getParameter("w");
String strH = request.getParameter("h");
//计算bmi
float w = Float.valueOf(strW);
float h = Float.valueOf(strH);
//计算bmi w/(h*h)
float bmi = w / (h * h);
String info = "";
if (bmi < 18.5) {
info = "比较瘦";
} else if (bmi >= 18.5 && bmi < 23.9) {
info = "正常";
} else {
info = "比较胖";
}
info = strName + "先生|女士,您的bmi是[" + bmi + "]," + info;
//使用HttpServletResponse对象输出数据,响应请求 text/html:普通文本格式
response.setContentType("text/html;charset=utf-8");
//输出数据到浏览器中
PrintWriter writer = response.getWriter();
writer.println(info);
writer.flush();//清空缓存
writer.close();
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
<input type="text" name="username" id="username">
// 从服务器获取了数据,更新当前页面的dom对象,完成处理请求
var data = xhr.responseText;
document.getElementById("username").value=data; //操作dom.更新输入框内容
Ajax请求传递Json字符串
//对象转换成json字符串 --> 步骤省略
...
response.setContentType("application/json;charset=utf-8");
//输出数据到浏览器中
PrintWriter writer = response.getWriter();
writer.println(json);
writer.flush();//清空缓存
writer.close();
//接着去script中用Ajax处理后台数据就可以了
script中用Ajax处理后台数据
<script type="application/javascript">
function doAjax() {
// alert("btn click");
console.log("btn is clicked");
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
console.log("onreadystatechange is using readystate=" + xhr.readyState + " status=" + xhr.status);
if (xhr.readyState == 4 && xhr.status == 200) {
//开发人员处理服务器返回的数据,更新dom对象
//接收数据
var data = xhr.responseText;
//得到的json串不能直接用,需要转换成json对象才能拿到数据
var obj = JSON.parse(data);//obj.xx就可以拿到数据了
//更新dom对象
//document.getElementById("myDiv").innerHTML = obj.xx;
document.getElementById("username").value=obj.xx; //操作dom.更新输入框内容
}
}
//初始化数据,请求路径
// var name = document.getElementById("name").value;
// url="ajaxservlet?"+"name="+name; 单参数
// url="ajaxservlet?"+"name="+name+"&password="+password; 多参数
xhr.open("get", url, true);
xhr.send();
}
</script>
Jquery AJAX
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script> //引入jquery
//道理一样, Jquery 只是简化代码
// $ <==> jQuery $() <==> jQuery对象 进而可以使用jQuery的方法
<input type="text" name="name" id="name">
<div class="div"></div>
// js 获得dom input 元素
var name = document.getElementById("name");//原生
var name = document.getElementByClass("div");//原生
var name = $('#name');//Jquery
var div = $('.div');//Jquery
//属性分类 固有属性:元素本身就有的属性(id,class,name,style) 返回值是boolean的属性(checked,selected,disabled) 自定义属性
//1.操作元素的属性
//获得属性
attr("属性名");
prop("属性名");
prop("disabled",true)//设置boolean型属性 (checked,selected,disabled) 偶尔可用
//移除属性
removeAttr("属性名");
//总结:
//结果属性的类型是boolean(checked,selected,disabled),则使用prop()方法;否则使用attr()方法
//2.操作元素的样式
css() //添加具体的样式 css("具体样式名","样式值"); 设置单个样式 css({具体样式名:样式值,具体样式名:样式值})设置多样式 常用
removeClass(class) //移除样式名称 常用
attr("class") //获取class属性的值
attr("class","样式名") //修改class属性的值,修改样式
addClass("样式名"); //添加样式名称
var cla= $("#div").attr("class"); //其他方法同理
//3.操作元素的内容
html(); //获取元素的内容 包含html标签
html("内容"); //设置元素内容 包含html标签
text(); //获取元素的纯文本内容 不包含html标签
text("内容"); //设置纯文本内容 不包含html标签
val(); //获取元素的值(表单)
//4.元素的操作
//创建元素
$('元素内容');
//example :
$('<h1>this is a h1 tittle</h1>');
//添加元素
//1.前追加
$(选择器) <==> 指定元素
指定元素.prepend("内容"); // 在指定元素内部的最前面添加内容,可以是字符串,html元素或jquery对象
$(内容).prependTo(指定元素); // 把内容加到指定元素内部的最前面,可以是字符串,html元素或jquery对象
//example :
var p = "<p>这是一个p标签</p>";
$(p).prependTo($("body")); //其他同理
//2.后追加
指定元素.append("内容"); // 在指定元素内部的最后面添加内容,可以是字符串,html元素或jquery对象
$(内容).appendTo(指定元素); // 把内容加到指定元素内部的最后面,可以是字符串,html元素或jquery对象
//3.前追加同级元素
before(内容); //在指定元素的前面追加内容
//example :
var sp = "<span>标签</span>";
$("div").before(sp); //其他同理
//4.后追加同级元素
after(内容); //在指定元素的后面追加内容
//删除元素
remove(); //删除所选元素或指定的子元素,包括整个标签和内容一起删除 常用
$("#div").remove();
empty(); //清空所选元素的内容,只清理标签里的内容
$("#div").empty();
//遍历元素(jQuery独有)
$(selector).each(function(index,element){}); //遍历元素
function 遍历时的回调函数
index 遍历元素的序列号,从0开始
element 当前的元素,此时是dom元素
//example :
<span>标签</span>
<span>标签</span>
<span>标签</span>
<span>标签</span>
$("span").each(function(index,element){
consle.log(index);
consle.log(element);
});
// ready加载事件 当页面dom结构加载完毕后才执行
$(document).ready(function(){
})
//简写 常用
$(function(){
});
//jQuery绑定事件 bind()
$(selector).bind(eventType[,eventData],handler(eventObject));
eventType : 是一个字符串类型的事件类型,就是你所需要绑定的事件
[,eventData]: 传递的参数,格式:{名1:值1,名2:值2} //一般省略
handler(eventObject):该事件触发执行的函数
//绑定单个事件
//bind() 绑定
$("元素").bind("事件类型",function(){
});
//直接 绑定 常用
$("元素").事件名(function(){
});
//example :
$("#test").bind("click",function(){
});
<button>点我</button>
$(this) //获得当前事件对象
$("#test").click(function(){
//属性的类型是boolean(checked,selected,disabled),则使用prop()方法;否则使用attr()方法
//禁用 button
$(this).prop("disabled",true); //相当于点击后标签成 <button disabled="disabled">点我</button>
});
//绑定多个事件
1.同时为多个事件绑定同一个函数
$("元素").bind("事件类型1 事件类型2",function(){
});
2.为元素绑定多个事件,并设置对应的函数 //链式
$("元素").bind("事件类型",function(){
}).bind("事件类型",function(){
});
3.为元素绑定多个事件,并设置对应的函数 //常用 多事件我喜欢
$("元素").bind({
"事件类型1":function(){},
"事件类型2":function(){},
"事件类型3":function(){}
});
//直接 绑定 常用
$("元素").事件名1(function(){}).事件名2(function(){});
//重点来咯 简化原生ajax
$.ajax({
type:请求方式GET/POST,
url:请求url,
async:是否异步,默认是true,表示异步,
data:发送到服务器的数据,
dataType:预期服务器返回的数据类型,
contentType:设置请求头,
sucess:请求成功时调用此函数,
error:请求失败时调用此函数
});
$.get
$.post
$.getJSON
本地数据模拟后台数据
[
{
"userId":1,
"userName":"lishi",
"userAge":12
},
{
"userId":2,
"userName":"zhanshan",
"userAge":15
},
{
"userId":3,
"userName":"lihaha",
"userAge":9
},
{
"userId":4,
"userName":"liyoyo",
"userAge":11
}
]
AJAX
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script src="./js/jquery-3.6.0.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
$.ajax({
type:"get",
url:"js/data.json",
data:{ //请求数据的参数 url ? uname:"zhanshan"
// uname:"zhanshan" 如果没有参数,这不需要设置
},
dataType:"json", //预期服务器返回的数据类型
//请求成功时调用的函数
success:function(data){ //data是形参名,代表的是服务器返回的数据
console.log(data); // 相当于 原生代码 的 var data = xhr.responseText;
//此处进行dom操作
//创建ul
var ul=$("<ul></ul>");
//遍历返回的数据
for(var i=0;i<data.length;i++){
//得到数组中每一个元素
var user=data[i];
var li="<li>"+user.userName+"</li>";
ul.append(li);
}
$("body").append(ul);
}
})
</script>
</body>
</html>
console
Array(4)
0: {userId: 1, userName: 'lishi', userAge: 12}
1: {userId: 2, userName: 'zhanshan', userAge: 15}
2: {userId: 3, userName: 'lihaha', userAge: 9}
3: {userId: 4, userName: 'liyoyo', userAge: 11}
length: 4
[[Prototype]]: Array(0)
浏览器
* lishi
* zhanshan
* lihaha
* liyoyo
添加事件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<button type="button" id="btn">点击</button>
<script src="./js/jquery-3.6.0.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
$("#btn").click(function(){
$.ajax({
type:"get",
url:"js/data.json",
data:{ //请求数据的参数 url ? uname:"zhanshan"
// uname:"zhanshan" 如果没有参数,这不需要设置
},
//请求成功时调用的函数
success:function(data){ //data是形参名,代表的是服务器返回的数据
console.log(data); // 相当于 原生代码 的 var data = xhr.responseText;
//此处进行dom操作
//创建ul
var ul=$("<ul></ul>");
//遍历返回的数据
for(var i=0;i<data.length;i++){
//得到数组中每一个元素
var user=data[i];
var li="<li>"+user.userName+"</li>";
ul.append(li);
}
$("body").append(ul);
}
})
})
</script>
</body>
</html>
$.get( ) 指定请求方式为get,返回数据类型可以任意
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script src="./js/jquery-3.6.0.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
// $.get("请求地址",{参数,没有可以不填},function(data){}) data:后台返回的数据
$.get("js/data.json",{},function(data){
console.log(data);
//操作dom即可
});
</script>
</body>
</html>
$.getJSON( ) 请求方式get ,返回数据类型指定为json(只识别json数据)
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script src="./js/jquery-3.6.0.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
// $.getJSON("请求地址",{参数,没有可以不填},function(data){}) data:后台返回的数据
$.getJSON("js/data.json",{},function(data){
console.log(data);
//操作dom即可
});
</script>
</body>
</html>
$.post() 请求方式post
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script src="./js/jquery-3.6.0.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
// $.post("请求地址",{参数,没有可以不填},function(data){}) data:后台返回的数据
$.post("xxxx",{},function(data){
console.log(data);
//操作dom即可
});
</script>
</body>
</html>