今日内容
1.AJAX
2.JSON
一、AJXA
1.概念:ASynchronous JavaScript And XML 异步的JavaScript和XML
通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。
即在不需要刷新页面的情况下,就可以产生局部刷新的效果。
这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
传统的网页(不使用AJAX)如果需要更新内容,必须重载整个页面。
提升用户的体验,更加流畅。
1.异步和同步:客户端和服务器端相互通信的基础讲的同步异步
* 客户端必须等待服务器端的响应,在等待期间客户端不能做其他操作。
* 客户端不需要等待服务器端的响应,在服务器处理请求的过程中,客户端可以进行其他操作。
* 例子:假设逻辑处理需要5s
如果给第一个input没有绑定了异步请求,那么当点击第一个input发送一个请求。
服务器收到请求要处理5s,然后才能响应。那么此时浏览器必须等待,整个页面会处于
等待状态。第二个input也就不能使用。
如果第一个input绑定了异步请求,那么当点击第一个input发送异步请求。虽然服务
器要处理5s才能响应,但是这是一个异步请求,浏览器还可以在做其他事情,第二个input
也能使用
2.实现方式
1.原生的JS实现方式(了解)
* 详见01-原生js实现ajax.html 较麻烦了解即可
2.JQuery实现方式
1. $.ajax()
* 语法: $.ajax({键值对});
```
function fun() {
//使用$.ajax()发送异步请求
$.ajax({
url:"ajaxServlet", //请求路径
type:"POST", //请求方式
//data:"username=jack&age=23", //请求参数
data:{"username":"jack", "age":23},
success:function(data){ //参数变量data:会接收服务器响应的结果的值
alert(data);
}, //响应成功后的回调函数:响应成功后会自动执行
error:function () {
alert("出错啦...")
}, //表示如果请求响应出错误,会执行的回调函数
dataType:"text" //设置可以接收的:响应数据的格式。
//最后一个键值对不用写逗号“,”
});
}
```
2. $.get(): 发送get请求
* 语法:$.get(url, [data], [callback], [type])
* 参数:url参数必写,后面三个参数可选
* url:请求路径
* data:请求参数
* callback:回调函数
* type:响应结果的类型
3. $post():发送post请求
* 参数会绑定到消息体上,其他同$.get()
### 二、JSON:
1.概念: JavaScript Object Notation JavaScript对象表示法
Java:讲一个数据封装
Person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");
JSON:将一个数封装
var p = {"name":"张三", "age":23, "gender":男}
* JSON 现在多用于存储和交换文本信息的语法。
* 进行数据的传输,JSON 比 XML 更小、更快,更易解析。
2.语法:
1.基本规则
数据在名称/值对中:json数据是由键值对构成的。
* var p = {"name":"张三", "age":23, "gender":男}
* 键用引号(单双都可)引起来,也可以不用引号。
数据由逗号分隔:多个键值对有逗号分隔
花括号保存对象:使用{}定义json格式
方括号保存数组:值可以时数组 []。
值的取值类型
数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true 或 false)
数组(在方括号中):{"person":[{},{}]}
对象(在花括号中): 可以相互嵌套 {"address":{"province":"安徽"...}}
null
2.获取数据
1.json对象.键名
2.json对象["键名"]
3.数组对象[索引]
3. JSON数据和Java对象的相互转换
将来我们要做的事是将json当作数据的载体,在网络中进行传输。客户端和服务器
端进行通信的时候,我们可以用json来当数据的载体。服务器拿到json数据时,要将json
中的数据拿出来在程序中使用,那么就需要将json数据转成JAVA对象。
(JSON数据可以转成任意的对象,只不过我们学的是JAVA所以才转成JAVA对象。)
同理JAVA对象也可以转成JSON数据再传送给客户端使用。
* JSON解析器:转换工具
* 常见的解析器:Jsonlib,Gson,fastjson,jackson
1. JSON转为Java对象 --- 用的不是特别多
1. 导入jackson的相关jar包
2. 创建Jackson核心对象 ObjectMapper
3. 调用ObjectMapper的相关方法进行转换
1. readValue(json字符串数据,Class)
2. Java对象转换JSON:使用步骤
1. 使用步骤:
1. 导入jackson的相关jar包
2. 创建Jackson核心对象 ObjectMapper
3. 调用ObjectMapper的相关方法进行转换
2. 转换方法:
2.1 writeValue(参数1,obj):
参数1:
* File:将obj对象转换为JSON字符串,并保存到指定的文件中
* Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输
出流中
* OutputStream:将obj对象转换为JSON字符串,并将json数据填充到
字节输出流中
2.2 writeValueAsString(obj):将对象转为json字符串
3. 注解:
1. @JsonIgnore:排除属性。排除的属性就不会被转成字符串了。
2. @JsonFormat:属性值的格式化
* @JsonFormat(pattern = "yyyy-MM-dd")
3. 例子:
birthday: Tue May 19 17:45:24 CST 2020
转成JSON数据后得到毫秒值: 1589881477790
所以需要格式化或者忽略:
1. 忽略:在Person类中 在private Date birthday;加上一个注解:
@JsonIgnore
2. 格式化@JsonFormat:属性值的格式化 :
@JsonFormat(pattern = "yyyy-MM-dd")
4. 复杂java对象怎么转换成JSON数据
1. List:转出来是一个数组
* [{"name":"张三","age":23,"gender":"男","birthday":"2020-05-19"},
{"name":"张三","age":23,"gender":"男","birthday":"2020-05-19"}]
2. Map:因为是键值对,所以转出来和JAVA对象格式一致
* {"name":"张三","gender":"男","age":23}
案例:
* 校验用户名是否存在
1. 服务器响应的数据,在客户端使用时,要想当做json数据格式使用。有两种解决方案:
1. $.get(type):将最后一个参数type指定为"json"
2. 在服务器端设置MIME类型
response.setContentType("application/json;charset=utf-8");
* dataType:预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP
包 MIME 信息来智能判断,
比如response.setContentType("application/json;charset=utf-8");
application/json -- > JSON就会生成一个JSON对象。