# AJAX #(异步)
- ASynchronous JavaScript And XML
- 客户端和服务器端的同步和异步
- 提升用户的体验
- 是一种在无需加载整个页面的情况下,能够更新部分网页的技术
- 通过后台与服务器进行少量的数据交换,Ajax可以使网页实现异步更新,(可以在不重新加载整个页面的情况下, 对网页的某部分进行更新)
原生js实现
`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
//定义方法
function fun() {
//发送异步请求
//1.创建核心对象
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
//2. 建立连接
/*
参数:
1. 请求方式:GET、POST
* get方式,请求参数在URL后边拼接。send方法为空参
* post方式,请求参数在send方法中定义
2. 请求的URL:
3. 同步或异步请求:true(异步)或 false(同步)
*/
xmlhttp.open("GET","ajaxServlet01?username=tom",true);
//3.发送请求
xmlhttp.send();
//4.接受并处理来自服务器的响应结果
//获取方式 :xmlhttp.responseText
//什么时候获取?当服务器响应成功后再获取
//当xmlhttp对象的就绪状态改变时,触发事件onreadystatechange。
xmlhttp.onreadystatechange=function()
{
//判断readyState就绪状态是否为4,判断status响应状态码是否为200
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
//获取服务器的响应结果
var responseText = xmlhttp.responseText;
alert(responseText);
}
}
}
</script>
</head>
<body>
<input type="button" value="发送异步请求" onclick="fun();">
<input>
</body>
</html>`
jQuery实现
- 三种实现方式
- $.ajax()
`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/jquery-3.3.1.min.js"></script>
<script>
//定义方法
function fun() {
$.ajax({
url: "ajaxServlet01",//请求路径
type: "post", //默认是get
data: {
"username": "jack", //参数列表json格式
"age": "23"
},
success:function(data){
//回调函数
alert(data)
}
});
}
//定义方法
function fun2() {
$.ajax({
url: "ajaxServlet02",//请求路径
type: "post", //默认是get
data: {
"username": "tom", //参数列表json格式
"age": "23"
},
success:function(data){
//回调函数
alert(data)
},
error:function(){
//出现错误
alter("出错了");
},
dataType:"json"//设置接受的响应数据的格式
});
}
</script>
</head>
<body>
<input type="button" value="发送异步请求" onclick="fun();">
<input type="button" value="发送异步请求2" onclick="fun2();">
<input>
</body>
</html>`
2. $.get()
`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/jquery-3.3.1.min.js"></script>
<script>
//定义方法
/*
* url:待载入页面的URL地址
data:待发送 Key/value 参数。
callback:载入成功时回调函数。
type:返回内容格式,xml, html, script, json, text, _default。
*/
function fun() {
$.get("ajaxServlet02",{username:"rose",age:"12"} ,function(data){
alert(data)
},"text")
}
function fun2() {
$.get("ajaxServlet02",{username:"tom",age:"13"} ,function(data){
alert(data)
},"text")
}
</script>
</head>
<body>
<input type="button" value="发送异步请求" onclick="fun();">
<input type="button" value="发送异步请求2" onclick="fun2();">
<input>
</body>
</html>`
3. $.post()
`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/jquery-3.3.1.min.js"></script>
<script>
//定义方法
/*
* url:待载入页面的URL地址
data:待发送 Key/value 参数。
callback:载入成功时回调函数。
type:返回内容格式,xml, html, script, json, text, _default。
*/
function fun() {
$.post("ajaxServlet02",{username:"rose",age:"12"} ,function(data){
alert(data)
},"text")
}
function fun2() {
$.post("ajaxServlet02",{username:"tom",age:"13"} ,function(data){
alert(data)
},"text")
}
</script>
</head>
<body>
<input type="button" value="发送异步请求" onclick="fun();">
<input type="button" value="发送异步请求2" onclick="fun2();">
<input>
</body>
</html>`
## Json数据格式 ##
- 全称是:JavaScript Object Notation---JavaScript对象表示法
- Json现在多用于存储和交换信息的语法--进行数据的传输
- Json比XML更小,更快,更容易解析
-
Json的语法
-
规则:
- 键值对 key 可以使用引号单双多是可以的, 也可以不用引号
- 数据之间用逗号分开
- 花括号保存对象(可以是数字,字符串(用引号引起来), 逻辑值(boolean), 数组(用花括号), Json对象,null值)
- 方括号用来保存数组
` <script>
//定义的基本格式
var Person = {name: "zhangsan", age: "12", gender: "男"}
alert(Person);
//嵌套格式 数组{ }---》[ ]
var Persons = {
person: [
{ name: "lisi",age: "113", gender: "男"},
{ name: "lisi",age: "113", gender: "男"},
{ name: "lisi",age: "113", gender: "男"},
{ name: "lisi",age: "113", gender: "男"},
]
}
//嵌套格式:数组里面有多个对象
var ps=[
{ name: "lisi",age: "113", gender: "男"},
{ name: "lisi",age: "113", gender: "男"},
{ name: "lisi",age: "113", gender: "男"},
{ name: "lisi",age: "113", gender: "男"}
]
//alert(Persons)
</script>`
2.Json获取数据
1.Json对象.键名
2. Json对象[键名]
----------
`//定义的基本格式
var Person = {name: "zhangsan", age: "12", gender: "男"}
var name = Person.name;
var age = Person["age"];
var gender = Person['gender'];
alert(name+age+gender)`
var Persons = {
person: [
{name: "lisi", age: "113", gender: "男"},
{name: "lisi", age: "113", gender: "男"},
{name: "lisi", age: "113", gender: "男"},
{name: "lisi", age: "113", gender: "男"},
]
}
var name1 = Persons.person[1].name;
var age1 = Persons.person[1].age;
var gender1 = Persons.person[1].gender;
alert(name1+age1+gender1);
## Json的遍历 ##
//定义的基本格式
var Person = {name: "zhangsan", age: "12", gender: "男"}
//遍历Json的key和value
for(var key in Person){
//key是一个字符串, 所以不能使用Person.key
alert(key + Person[key])
}
` //嵌套格式:数组里面有多个对象
var ps = [
{name: "lisi", age: "113", gender: "男"},
{name: "lisi", age: "113", gender: "男"},
{name: "lisi", age: "113", gender: "男"},
{name: "lisi", age: "113", gender: "男"}
]
for (var i = 0; i < ps.length; i++) {
var p= ps[i]
for(var key in p){
alert(key+p[key])
}
}`
Json解析器
Jsonlib Gson fastJson (Alibaba) jackson(springmvc 中的解析器)
- Json数据和java对象之间转化
1. json转换java
@Test
public void test04() throws IOException {
//将json数据转换成java对象
//1。初始化json数据
String json="{\"gender\":\"男\",\"name\":\"zhangsan\",\"age\":12}";
//创建ObjectMapper对象
ObjectMapper mapper = new ObjectMapper();
Person person = mapper.readValue(json, Person.class);
System.out.println(person);
}
@Test
public void test05() throws IOException {//将json字符串转换为List集合
//1。初始化json数据
ArrayList<Person> list = new ArrayList<>();
list.add(new Person("zhangsan", 1212, "nan", new Date()));
list.add(new Person("zhangsan", 1212, "nan", new Date()));
list.add(new Person("zhangsan", 1212, "nan", new Date()));
ObjectMapper mapper = new ObjectMapper();
String s = mapper.writeValueAsString(list);
//创建ObjectMapper对象
ArrayList<String> arrayList = mapper.readValue(s, ArrayList.class);
System.out.println(arrayList);
}
@Test
public void test07() throws IOException {
//json字符串转换成HashMap集合
Map<String, Object> map = new HashMap<>();
map.put("name","zhangsan");
map.put("age",12);
map.put("gender","男");
ObjectMapper mapper = new ObjectMapper();
String s = mapper.writeValueAsString(map);
//{"gender":"男","name":"zhangsan","age":12}
HashMap hashMap = mapper.readValue(s, HashMap.class);
Set set = hashMap.entrySet();
set.stream().forEach(name-> System.out.println(name));
}
2. java转换成json
1. 导入jar包jackson
2. 创建jackson对象ObjectMapper
3. 使用方法转换成Json字符串
# java转换Json字符串 #
` @Test
public void test1() throws IOException { //java对象转化成json字符串
Person person = new Person("zhangsan", 1212, "nan");
//创建Jackson的核心对象
ObjectMapper mapper = new ObjectMapper();
/*
* mapper.writeValue()
* 参数:
* File:将对象转换为json字符串, 并保存到指定的文件中
* Writer:将对象转换为json字符串,并将json数据填充到字符输出流中
* OutputStream:将对象转换为json对象, 并将json数据填充到字节输出流中
*
* */
String json = mapper.writeValueAsString(person);
System.out.println(json);//{"name":"zhangsan","age":1212,"gender":"nan"}
mapper.writeValue(new File("a.txt"),person);
}`
注解
1. 排除属性的 @JsonIgnore:排除属性(忽略该属性 ,在属性或者getset方法中 使用该注解)
2. @JsonFormat:格式化注解:(使用注解格式化, 用在属性或者)
@JsonFormat(pattern="yyyy-MM-DD")
@JsonIgnore
private Date birthday;**
3.list或者map类型转换成Json
@Test
public void test02() throws JsonProcessingException {
ArrayList<Person> list = new ArrayList<>();
list.add(new Person("zhangsan", 1212, "nan", new Date()));
list.add(new Person("zhangsan", 1212, "nan", new Date()));
list.add(new Person("zhangsan", 1212, "nan", new Date()));
ObjectMapper mapper = new ObjectMapper();
String s = mapper.writeValueAsString(list);
//[{"name":"zhangsan","age":1212,"gender":"nan"},{"name":"zhangsan","age":1212,"gender":"nan"},{"name":"zhangsan","age":1212,"gender":"nan"}]
System.out.println(s);
}
@Test
public void test03() throws JsonProcessingException {
Map<String, Object> map = new HashMap<>();
map.put("name","zhangsan");
map.put("age",12);
map.put("gender","男");
ObjectMapper mapper = new ObjectMapper();
String s = mapper.writeValueAsString(map);
//{"gender":"男","name":"zhangsan","age":12}
System.out.println(s);
}