AJAX学习文档
Author:Exchanges
Version:9.0.2
一、引言1.1 什么是JSON1.2 JSON语法二、JSON解析【重点
】2.1 FastJSON解析2.2 Jackson解析三、Ajax使用【重点
】3.1 什么是AJAX?3.2 AJAX工作原理3.3 原生AJAX3.4 相关属性四、JQuery方式实现4.1 三种方式实现,导入jquery.js文件
一、引言
1.1 什么是JSON
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (W3C制定的JS规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
1.2 JSON语法
[] 表示数组
{} 表示对象
"" 表示是属性名或字符串类型的值
: 表示属性和值之间的间隔符
, 表示多个属性的间隔符或者是多个元素的间隔符
二、JSON解析【重点
】
要解析的字符串:将字符串解析为Java对象
<script type="application/javascript">
//对象
var user = {
"id":1001,
"username":"张三",
age:23
}
document.writeln(user.id + "---" +user.username+"---"+user.age);
//数组
var users = [
{"id":"1001","username":"张三","age":"23"},
{"id":"1002","username":"李四","age":"24"},
{"id":"1003","username":"王五","age":"25"}
]
document.write(users[0].username);
//嵌套
var data = {
"users":[
{"id":"1001","username":"张三","age":"23"},
{"id":"1002","username":"李四","age":"24"},
{"id":"1003","username":"王五","age":"25"}
],
"admins":[
{"id":"1","username":"jack","password":"123"},
{"id":"2","username":"tom","password":"456"},
{"id":"3","username":"rose","password":"789"}
]
}
document.write(data.admins[2].password);
</script>
创建User类
package com.qf.pojo;
import java.io.Serializable;
//实体类:符合JavaBean规范,然后实现序列化接口
public class User implements Serializable {
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
2.1 FastJSON解析
Fastjson 是阿里巴巴开发的一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象
导入jar包
提供了 toJSONString() 和 parseObject() 方法来将 Java 对象与 JSON 相互转换:
调用toJSONString方 法即可将对象转换成 JSON 字符串
parseObject 方法则反过来将 JSON 字符串转换成对象。
Json和User对象之间的转换
//User对象和Json之间的转换
Json和List集合之间的转换,注:导入的类是import com.alibaba.fastjson.TypeReference;
//User集合对象和Json之间的转换
2.2 Jackson解析
Jackson 是一个能够将Java对象序列化为JSON字符串,也能够将JSON字符串反序列化为Java对象的框架;
导入jar包
通过方法readValue和writeValue实现;
Json和User对象之间的转换
//User对象和Json之间的转换
Json和List集合之间的转换,注:导入的类是import com.fasterxml.jackson.core.type.TypeReference;
//User集合对象和Json之间的转换
@Test
public void testJackson2()throws Exception{
User user1 = new User();
user1.setId(1001);
user1.setUsername("张三");
user1.setPassword("123");
User user2 = new User();
user2.setId(1002);
user2.setUsername("李四");
user2.setPassword("456");
ArrayList<User> users = new ArrayList<>();
users.add(user1);
users.add(user2);
System.out.println(users);
//List --> Json
ObjectMapper objectMapper = new ObjectMapper();
String jsonUsers = objectMapper.writeValueAsString(users);
System.out.println(jsonUsers);
//Json --> List
List<User> list = objectMapper.readValue(jsonUsers, new TypeReference<List<User>>() {});
System.out.println(list);
}
三、Ajax使用【重点
】
3.1 什么是AJAX?
同步和异步是建立在客户端和服务器端相互通信的基础上。
同步:客户端必须等待服务器端的响应,在等待的期间客户端不能做其他操作。 异步:客户端不需要等待服务器端的响应,在服务器处理请求的过程中,客户端可以进行其他的操作。
AJAX = ASynchronous JavaScript And XML 异步的JavaScript 和 XML。
AJAX 是一种用于创建快速动态网页的技术。
Ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术,提升用户的体验。 通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新
传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。
3.2 AJAX工作原理
AJAX工作原理 |
---|
AJAX是基于现有的Internet标准,并且联合使用它们:
XMLHttpRequest 对象 (异步的与服务器交换数据)
JavaScript/DOM (信息显示/交互)
CSS (给数据定义样式)
XML (作为转换数据的格式)
3.3 原生AJAX
原生js实现: 1.创建XMLHttpRequest对象 2.将状态触发器绑定到一个函数 3.使用open方法建立与服务器的连接 4.向服务器端发送数据 5.在回调函数中对返回数据进行处理
方法: open(),send()
属性: onreadystatechange: 状态回调函数 responseText/responseXML: 服务器的响应字符串 status: 服务器返回的HTTP状态码 statusText: 服务器返回的HTTP状态信息 readyState: 对象状态
客户端向服务器提交数据
案例:
html页面
Servlet代码
package com.qf.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;
方法 | 描述 |
---|---|
open(method,url,async) | 规定请求的类型、URL 以及是否异步处理请求。method:请求的类型;GET 或 POST;url:文件在服务器上的位置;async:true(异步)或 false(同步),并且XMLHttpRequest 对象如果要用于 AJAX 的话,其 open() 方法的 async 参数必须设置为 true; |
send(string) | 将请求发送到服务器。string:仅用于 POST 请求 |
GET 还是 POST?
与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。
然而,在以下情况中,请使用 POST 请求:
无法使用缓存文件(更新服务器上的文件或数据库)
向服务器发送大量数据(POST 没有数据量限制)
发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠
3.4 相关属性
每当 readyState 改变时,就会触发 onreadystatechange 事件。
在 onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。
readyState 属性存有 XMLHttpRequest 的状态信息。
当 readyState 等于 4 且状态为 200 时,表示响应已就绪:
下面是 XMLHttpRequest 对象的三个重要的属性:
属性 | 描述 |
---|---|
onreadystatechange | 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。 |
readyState | 存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。0: 请求未初始化1: 服务器连接已建立2: 请求已接收3: 请求处理中4: 请求已完成,且响应已就绪 |
status | 例:200: "OK" ;404: 未找到页面 |
响应码 | 描述 |
---|---|
100 | 客户必须继续发出请求 |
101 | 客户要求服务器根据请求转换HTTP协议版本 |
200 | 交易成功 |
201 | 提示知道新文件的URL |
202 | 接受和处理、但处理未完成 |
203 | 返回信息不确定或不完整 |
204 | 请求收到,但返回信息为空 |
205 | 服务器完成了请求,用户代理必须复位当前已经浏览过的文件 |
206 | 服务器已经完成了部分用户的GET请求 |
300 | 请求的资源可在多处得到 |
301 | 删除请求数据 |
302 | 在其他地址发现了请求数据 |
303 | 建议客户访问其他URL或访问方式 |
304 | 客户端已经执行了GET,但文件未变化 |
305 | 请求的资源必须从服务器指定的地址得到 |
306 | 前一版本HTTP中使用的代码,现行版本中不再使用 |
307 | 申明请求的资源临时性删除 |
400 | 错误请求,如语法错误 |
401 | 请求授权失败 |
402 | 保留有效ChargeTo头响应 |
403 | 请求不允许 |
404 | 没有发现文件、查询或URl |
405 | 用户在Request-Line字段定义的方法不允许 |
406 | 根据用户发送的Accept拖,请求资源不可访问 |
407 | 类似401,用户必须首先在代理服务器上得到授权 |
408 | 客户端没有在用户指定的饿时间内完成请求 |
409 | 对当前资源状态,请求不能完成 |
410 | 服务器上不再有此资源且无进一步的参考地址 |
411 | 服务器拒绝用户定义的Content-Length属性请求 |
412 | 一个或多个请求头字段在当前请求中错误 |
413 | 请求的资源大于服务器允许的大小 |
414 | 请求的资源URL长于服务器允许的长度 |
415 | 请求资源不支持请求项目格式 |
416 | 请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段 |
417 | 服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求 |
500 | 服务器产生内部错误 |
501 | 服务器不支持请求的函数 |
502 | 服务器暂时不可用,有时是为了防止发生系统过载 |
503 | 服务器过载或暂停维修 |
504 | 关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长 |
505 | 服务器不支持或拒绝支请求头中指定的HTTP版本 |
四、JQuery方式实现
4.1 三种方式实现,导入jquery.js文件
方式一:
//使用$.ajax()发送异步请求
$.ajax({
url:"ajaxServlet" , // 请求路径
type:"POST" , //请求方式
//data: "username=jack&age=23",//请求参数
data:{"username":"jack","age":23},
success:function (data) {
alert(data);
},//响应成功后的回调函数
error:function () {
alert("出错啦...")
},//表示如果请求响应出现错误,会执行的回调函数
dataType:"text"//设置接受到的响应数据的格式
});
方式二:
//GET发送异步请求
$.get("ajaxServlet",{username:"jack"},function (data) {
alert(data);
},"text");
方式三:
方式三:
//POST发送异步请求
$.post("ajaxServlet",{username:"jack"},function (data) {
alert(data);
},"text");