目录
一、基本介绍
二、JSON格式
三、JSON的使用
1. JSON对象和JSON字符串的转换
2. JSON在java中的使用
四、Ajax的使用
1. 基本介绍
2. Ajax应用的场景
3. 使用原生的javaScript发送Ajax请求
3.1 创建XMLHttpRequest对象
3.2 向服务器发送请求
3.3 服务器响应
3.4 处理服务器响应之后的请求
4. 使用Jquery发送Ajax请求
4.1 使用$.ajax()进行Ajax请求
4.2 使用$.get()进行Ajax请求
4.3 使用$.post()进行Ajax请求
4.4 使用$.getJson()进行Ajax请求
五、总结
一、基本介绍
JSON
:JavaScript对象表示法(JavaScript Object Notation)。JSON是轻量级的文本呢数据交换格式。JSON
并非只服务于某一个语言,而是像java、php、go等都可以使用JSON
二、JSON格式
var 变量名 = {
"k1" : value, //Number类型
"k2" : "value", //字符串类型
"k3" : [], //数组类型
"k4" : {}, //json对象类型
"k5" : [{}{}] //json数组
}
💡提示:
- 映射(元素/属性)用冒号 : 表示,
"名称":值
。注意名称是字符串
,因此要用双引号引起来并列的数据
之间用逗号 , 分隔。“名称 1”:值,“名称 2”:值- 映射的集合
(对象)
用大括号 {} 表示。{“名称 1”:值,“名称 2”:值}- 并列数据的集合(数组)用方括号 [] 表示。 [{“名称 1”:值,“名称 2”:值}, {“名称 1”:值," 名称 2":值}]
- 元素值类型:
string, number, object, array, true, false, null
📝示例:
var myJson = {
"key1": "MyJson", // 字符串
"key2": 123, // Number
"key3": [1, "hello", 2.3], // 数组
"key4": {"age": 12, "name": "jack"}, //json 对象
"key5": [
{"k1":10,"k2":"str"},
{"k3":10,"k4":"str"}
] //json 数组
};
三、JSON的使用
这里先简单演示一下,快速入门
📌演示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>演示</title>
<script type="text/javascript" src="../../script/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
var myJson = {
"key1": "myJson", // 字符串
"key2": 123, // Number
"key3": [1, "hello", 2.3], // 数组
"key4": {"age": 12, "name": "jack"}, //json 对象
"key5": [] //json 数组
};
alert(myJson.key3);
</script>
</head>
<body>
</body>
</html>
1. JSON对象和JSON字符串的转换
🔉需要用到的方法
// 将一个json对象转换为json字符串
JSON.stringfiy(json对象)
// 将一个json字符串转换为json对象
JSON.parse(jsonString)
- 这里的
JSON
是一个内置对象,不需要创建。- 上面两个方法的使用,都不会影响原来的 JSON对象/json字符串,而是返回一个新的转换后的变量。
- 在定义
JSON对象
的时候,可以使用单引号''
表示字符串- 在将原生的字符串转换为json对象的时候,必须使用双引号
""
,否则会报错。- 、
JSON.springify(json 对象)
返回的字符串, 都是用双引号""
表示的字符串, 所以在语法格式正确的情况下, 是可以重新转成 json 对象的。
2. JSON在java中的使用
java中使用JSON,需要引入第三方的
gson.jar
包。gson是Goole提供的用来在Java对象和JSON数据之间进行映射的java类库
📝示例
Student对象
package com.json;
/**
* @author long
* @date 2022/9/14
*/
public class Student {
private int id;
private int age;
private String name;
public Student(int id, int age, String name) {
this.id = id;
this.age = age;
this.name = name;
}
public Student() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", age=" + age +
", name='" + name + '\'' +
'}';
}
}
📌json字符串和java对象的相互转化
package com.json;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
/**
* @author long
* @date 2022/9/14
*/
public class MyJson{
public static void main(String[] args) {
Student student = new Student(1, 18, "张三");
Gson gson = new Gson();
// java对象转换为json字符串
String studentStr = gson.toJson(student);
System.out.println(studentStr);
// json字符串转换为java对象
Student student1 = gson.fromJson(studentStr, Student.class);
System.out.println(student1);
}
}
📌json字符串和java集合的相互转换
package com.json;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;
import java.util.List;
/**
* @author long
* @date 2022/9/14
*/
public class MyJson{
static class StudentType extends TypeToken<List<Student>>{}
public static void main(String[] args) {
// List集合和json的相互转换
List<Student> studentList = new ArrayList<>();
studentList.add(new Student(2,18,"李四"));
studentList.add(new Student(3,18,"王五"));
// List转换为json字符串
String listStr = gson.toJson(studentList);
System.out.println(listStr);
// json字符串转换为List(方式一)
List<Student> studentList1= gson.fromJson(listStr, new StudentType().getType());
System.out.println(studentList1);
// json字符串转换为List(方式二:匿名内部类)
List<Student> studentList2 = gson.fromJson(listStr, new TypeToken<List<Student>>() {
}.getType());
System.out.println(studentList2);
}
}
package com.json;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.HashMap;
import java.util.Map;
/**
* @author long
* @date 2022/9/14
*/
public class MyJson{
public static void main(String[] args) {
// map集合和json的相互转换
Map<String,Student> studentMap = new HashMap<>();
studentMap.put("one",new Student(4,18,"张三"));
studentMap.put("two",new Student(5,18,"张三"));
// map转为json
String studentMapStr = gson.toJson(studentMap);
System.out.println(studentMapStr);
// json转为map
Map<String,Student> studentMap1 = gson.fromJson(studentMapStr, new TypeToken<HashMap<String, Book>>() {
}.getType());
System.out.println(studentMap1);
}
}
四、Ajax的使用
1.基本介绍
Ajax:
Asynchronous Javascript And XML
(异步 JavaScript 和 XML)。Ajax
是一种浏览器异步发起请求(指定发哪些数据),局部更新页面数据的技术。
异步发起请求
:即我向后台发送了数据,但我的整个页面不会重新刷新(这样避免了每次都向后端发送很多重复的,无用的数据)
2.Ajax应用的场景
- 搜索引擎根据用户输入关键字,自动提示检索关键字
- 动态加载数据,按需取得数据【树形菜单、联动菜单…】
- 改善用户体验。【输入内容前提示、带进度条文件上传…】
- 电子商务应用。 【购物车、邮件订阅…】
3.javaScript原生Ajax请求
首先我们简单的演示一下
📝演示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户注册</title>
<script type="text/javascript">
window.onload = function () { //页面加载后执行function
var checkButton = document.getElementById("checkButton");
//给checkButton绑定onclick
checkButton.onclick = function () {
// 创建XMLHttpRequest对象(!!!) [ajax引擎对象]
var xhr = new XMLHttpRequest();
// 获取用户填写的用户名
var uname = document.getElementById("uname").value;
// 准备发送指定数据 open, send
xhr.open("GET", "/ajax/checkUserServlet?uname=" + uname, true);
// 每当 xhr对象readyState 改变时,就会触发 onreadystatechange 事件
xhr.onreadystatechange = function () {
//如果请求已完成,且响应已就绪, 并且状态码是200
if (xhr.readyState == 4 && xhr.status == 200) {
//把返回的jon数据,显示在div
document.getElementById("div1").innerHTML = xhr.responseText;
var responseText = xhr.responseText;
if (responseText != "") {
document.getElementById("myres").value = "用户名不可用"
} else {
document.getElementById("myres").value = "用户名可用"
}
}
}
xhr.send();
}
}
</script>
</head>
<body>
<h1>用户注册~</h1>
<form action="/ajax/checkUserServlet" method="post">
用户名字:<input type="text" name="username" id="uname">
<input type="button" id="checkButton" value="验证用户名">
<input style="border-width: 0;color: red" type="text" id="myres"><br/><br/>
用户密码:<input type="password" name="password"><br/><br/>
电子邮件:<input type="text" name="email"><br/><br/>
<input type="submit" value="用户注册">
</form>
<h1>返回的json数据</h1>
<div id="div1"></div>
</body>
</html>
📌使用步骤
3.1 创建XMLHttpRequest对象
var xhr = new XMLHttpRequest();
3.2 向服务器发送请求
GET方式
xmlhttp.open("GET", "/ajax/checkUserServlet?uname=" + uname, true);
xmlhttp.send();
POST方式
xmlhttp.open("POST","/ajax/checkUserServlet",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("uname" + uname);
-
因为要异步请求,所以
open()
方法的第三个参数必须为true
-
POST
请求发送表单数据的时候,需要将表单数据添加到send()
的参数里 -
GET
请求发送表单数据的时候,是将表单数据添加发送地址后边 -
上面的用例,表单数据发送到时候在url后边添加了
?uname=
,这相当于表单数据的name名称
,所以Servlet获取参数的时候应该是String uname = request.getParameter("uname");
3.3 服务器响应
XMLHttpRequest有两个属性,用来获取响应的数据。
responseText
:获得字符串形式的响应数据。responseXML
:获得XML形式的响应数据。
3.4 处理服务器返回的响应
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
XMLHttpRequest对象有三个属性:
onreadystatechange
:存储函数(或函数名),每当readyState 属性改变
时,就会调用该函数。readyState
:XMLHttpRequest的状态,共四种。
- 0:请求未初始化
- 1:服务器连接已建立
- 2:请求已接收
- 3:请求处理中
- 4:请求已完成,且响应已就绪
status
:状态码
- 200:响应成功
- 404:未找到页面
4. jQuery的Ajax请求
4.1 使用$.ajax()进行Ajax请求
📝示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户注册</title>
<!-- 引入jquery-->
<script type="text/javascript" src="./script/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
$(function () {
//绑定事件
$("#btn1").click(function () {
//发出ajax
$.ajax({
url: "/ajax/checkUserServlet2",
type: "POST",
data: { //这里我们直接给json传日期, 是为了浏览器缓存
username: $("#uname").val(),
date: new Date()
},
error: function () { //失败后的回调函数
console.log("失败~")
},
success: function (data, status, xhr) {
console.log("成功");
console.log("data=", data);
console.log("status=", status);
console.log("xhr=", xhr);
//data是json对象-> 显示转成json的字符串
$("#div1").html(JSON.stringify(data));
//对返回的结果进行处理
if ("" == data.username) {
$("#myres").val("该用户名可用");
} else {
$("#myres").val("该用户名不可用");
}
},
// dataType可以决定succes等回调函数处理数据的格式
dataType: "json"
})
})
})
</script>
</head>
<body>
<h1>用户注册-Jquery+Ajax</h1>
<form action="/ajax/checkUserServlet2" method="post">
用户名字:<input type="text" name="username" id="uname">
<input type="button" id="btn1" value="验证用户名">
<input style="border-width: 0;color: red" type="text" id="myres"><br/><br/>
用户密码:<input type="password" name="password"><br/><br/>
电子邮件:<input type="text" name="email"><br/><br/>
<input type="submit" id="submit" value="用户注册">
</form>
<h1>返回的json数据</h1>
<div id="div1"></div>
</body>
</html>
🎈回调函数有三个参数:
success
(response,status,xhr):
- response - 包含来自请求的结果数据
- status - 包含请求的状态
- xhr - 包含 XMLHttpRequest 对象
4.2 使用$.get()进行Ajax请求
📝示例:
$.get(
"/ajax/checkUserServlet",
{
username: $("#uname").val(),
date: new Date()
},
function (data, status, xhr) {
console.log("$.get() 成功");
console.log("data=", data);
console.log("status=", status);
console.log("xhr=", xhr);
//data是json对象-> 显示转成json的字符串
$("#div1").html(JSON.stringify(data));
//对返回的结果进行处理
if ("" == data.username) {
$("#myres").val("该用户名可用");
} else {
$("#myres").val("该用户名不可用");
}
},
"json"
)
💡说明:
- $.get() 默认是get请求,不需要指定 请求方式
- 不需要指定参数名
- 填写的实参,是
顺序
url, data, success回调函数, 返回的数据格式
4.3 使用$.post()进行Ajax请求
📝示例:
和$.get()
的方式一样
$.post(
"/ajax/checkUserServlet",
{
username: $("#uname").val(),
date: new Date()
},
function (data, status, xhr) {
console.log("$.post() 成功");
console.log("data=", data);
console.log("status=", status);
console.log("xhr=", xhr);
//data是json对象-> 显示转成json的字符串
$("#div1").html(JSON.stringify(data));
//对返回的结果进行处理
if ("" == data.username) {
$("#myres").val("该用户名可用");
} else {
$("#myres").val("该用户名不可用");
}
},
"json"
)
4.4 使用$.getJson()进行Ajax请求
这个方式的Ajax请求必须是
get请求
,并且返回的数据格式必须是json
📝示例:
$.getJSON(
"/ajax/checkUserServlet2",
{
username: $("#uname").val(),
date: new Date()
},
function (data, status, xhr) {//成功后的回调函数
console.log("$.getJSON 成功");
console.log("data=", data);
console.log("status=", status);
console.log("xhr=", xhr);
//data是json对象-> 显示转成json的字符串
$("#div1").html(JSON.stringify(data));
//对返回的结果进行处理
if ("" == data.username) {
$("#myres").val("该用户名可用");
} else {
$("#myres").val("该用户名不可用");
}
}
)
五、总结
以上就是我分享的关于
Ajax和JSON
的所有内容。讲解的不是很深入,适合于想快速上手的小伙伴!如果想要深入了解,大家可以去👉官网了解。
最后希望大家多多关注^_^,你们的关注是我不断前进的动力!!!
感谢感谢~~~🙏🙏🙏