1、JSON
1、什么是JSON?
2、Json在JavaScript中的使用
3、Json在java中的使用
2、Ajax
1、什么是Ajax请求?
2、JQuery中的Ajax请求
3、Ajax示例代码
1、JSON
1、什么是JSON?
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。
2、Json在JavaScript中的使用
json的定义
json是由花括号组成,然后里面都是键值对。
并且每个键都由引号引起来。键和值之间使用冒号进行分隔。那么每组键值对之间使用逗号分隔。
var json = {
“key” : value ,
“key2” : value2
};
值可以是string,number,数组类型,json对象。json数组。
var = {
"key1" : 12,
"key2" : "abc",
"key3" : ["123","bda",true],
"key4" : { // json套json
"key4_1" : 41,
"key4_2" : "42"
},
"key5" : [{
"key5_1_1" : 511,
"key5_1_2" : "512"
},{
"key5_2_1" : 521,
"key5_2_2" : "522"
}]
};
// json的访问
json对象.key
alert( jsonObj.key1 ); // 12
alert( jsonObj.key3[1] );
alert( jsonObj.key4.key4_2 );
alert( jsonObj.key5[0].key5_1_2 );
Json的两个常用方法
JSON.stringify() 把json对象转换成为json字符串
JSON.parse() 把json字符串转换成为json对象
// json对象转字符串
var jsonString = JSON.stringify( jsonObj );
alert( jsonString );
// json字符串转json对象
var obj = JSON.parse( jsonString );
alert( obj.key5[0].key5_1_2 );
3、Json在java中的使用
javaBean和json的互转
@Test
public void bean2Json() {
Person person = new Person(1,"国华");
// 先创建出gson工具类
Gson gson = new Gson();
// toJson可以把任意数据转换成为json字符串
String personJsonString = gson.toJson(person);
System.out.println( personJsonString );
// fromJson把json字符串转换成为java对象
Person p1 = gson.fromJson(personJsonString, Person.class);
System.out.println( p1 );
}
List 和json的互转
@Test
public void list2Json() {
List<Person> persons = new ArrayList<Person>();
persons.add(new Person(1, "p1"));
persons.add(new Person(2, "p2"));
persons.add(new Person(3, "p3"));
persons.add(new Person(4, "p4"));
persons.add(new Person(5, "p5"));
Gson gson = new Gson();
// 把一个list集合转换成为json字符串
String personListJsonString = gson.toJson(persons);
System.out.println( personListJsonString );
// List<Person> list2 = gson.fromJson(personListJsonString,new PersonListTypeToken().getType());
// 官方推荐使用方法
List<Person> list2 = gson.fromJson(personListJsonString, new TypeToken<ArrayList<Person>>() {}.getType());
System.out.println( list2 );
Person person = list2.get(0);
System.out.println(person);
}
map 和json的互转
@Test
public void map2Json() {
Map<String, Person> personMap = new HashMap<String, Person>();
personMap.put("p1", new Person(1, "p1"));
personMap.put("p2", new Person(2, "xxx"));
personMap.put("p3", new Person(3, "31234"));
Gson gson = new Gson();
// 把map集合转换成为json字符串
String jsonString = gson.toJson(personMap);
System.out.println( jsonString );
// 把json字符串转换成为map集合
Map<String, Person> map = gson.fromJson(jsonString, new TypeToken<HashMap<String, Person>>() {}.getType());
System.out.println( map );
Person person = map.get("p1");
System.out.println(person);
}

Json对象和string的转换只有这两种,第一种只能传泛型类对象:new Gson().fromJson(json, classOfT)
Person.class
,第二种只能用来转换list或map集合:new Gson().fromJson(json, typeOfT)
new TypeToken<ArrayList<Person>>() {}.getType()
new TypeToken<HashMap<String, Person>>() {}.getType()
2、Ajax
1、什么是Ajax请求?
AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。
ajax是一种浏览器异步发起请求。局部更新页面的技术。
原生Ajax请求的实现
<script type="text/javascript">
function ajaxRequest() {
// 1、我们首先要创建XMLHttpRequest
var request = new XMLHttpRequest();
// 2、调用open方法设置请求参数
request.open("GET", "ajaxServlet?action=javaScriptAjax", true);
// 4、在send方法前绑定onreadystatechange事件,处理请求完成后的操作。
request.onreadystatechange = function(){
if (request.readyState == 4 && request.status == 200) {
alert( "这是响应回来之后" );
document.getElementById("div01").innerHTML = request.responseText;
}
}
// 3、调用send方法发送请求
request.send();
alert("这是ajax代码完成之后");
}
</script>
</head>
ajaxServlet?action=javaScriptAjax是我的一个servlet地址
2、JQuery中的Ajax请求
$.ajax方法
url请求的地址
type 请求的方式GET或POST
data请求的参数。有两种格式,name=value&name=value或 {key:value,key:value}
success成功的回调函数
dataType返回的数据类型。常用的类型是:text、json、xml
// ajax请求
$("#ajaxBtn").click(function(){
$.ajax({
url:"ajaxServlet",
type:"GET",
data:"action=jqueryAjax",
success:function(msg){
//jquery的Ajax请求的回调函数,必须要有参数。
// 这个参数是响应的数据(服务器传回来的数据),可以随便命名
// $("#msg").html(msg);
// alert(msg);
// var obj = JSON.parse(msg);
$("#msg").html("用户 编号是:" + msg.id + ",姓名是:" + msg.name);
},
dataType:"json"
});
});
$.get方法和$.post方法
url请求的地址
data请求的参数
callback成功的回调函数
type返回的数据类型。常用的类型是:text、json、
// ajax--get请求
$("#getBtn").click(function(){
$.get("ajaxServlet",{action:"jqueryGet"},function(msg){
$("#msg").html("get 用户 编号是:" + msg.id + ",姓名是:" + msg.name);
},"json");
});
// ajax--post请求
$("#postBtn").click(function(){
// post请求
$.post("ajaxServlet",{action:"jqueryPost"},function(msg){
$("#msg").html("post 用户 编号是:" + msg.id + ",姓名是:" + msg.name);
},"json");
});
$.getJSON方法:必须大写JSON(返回的数据类型:只能是json,所以不必指定)
url 请求的地址
data 请求的参数
callback 请求成功回调函数
// ajax--getJson请求
$("#getJSONBtn").click(function(){
// 调用
$.getJSON("ajaxServlet","action=jqueryGetJSON",function(msg){
$("#msg").html("getJSON 用户 编号是:" + msg.id + ",姓名是:" + msg.name);
});
});
// ajax请求
$("#submit").click(function(){
// 把参数序列化
alert( $("#form01").serialize() );
$.getJSON("ajaxServlet","action=jquerySerialize&" + $("#form01").serialize(),function(msg){
$("#msg").html("serialize 用户 编号是:" + msg.id + ",姓名是:" + msg.name);
});
});
表单序列化serialize()
把form标签中所有的子元素中抽取出name和value的值,做字符串拼接。
拼接的格式是:name=value&name=value
3、Ajax示例代码
案例:使用Ajax局部刷新功能---验证用户名是否可用(表单就一个登陆用户名与密码的表单,不贴了)
页面端的代码:
$("#username").blur(function(){
//1 获取输入框中的用户名
var username = this.value;
//2发起请求给服务器
$.get("userServlet","action=ajaxExistsUsername&username=" + username,function(msg){
//3接收响应的结果,提示用户
if (msg.isExists) {
//已存在
$("span.errorMsg").text("用户名已存在!");
} else {
// 可用
$("span.errorMsg").text("用户名可用!");
}
},"json");
});
服务器的代码:
protected void ajaxExistsUsername(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//1 获取请求的参数 用户名
String username = request.getParameter("username");
boolean isExists = userService.existsUsername(username);
Map<String, Object> result = new HashMap<String, Object>();
result.put("isExists", isExists);
response.getWriter().write( new Gson().toJson(result) );
}
案例二:使用Ajax请求局部刷新---修改购物车-----添加商品
客户端:
1、给加入购物车绑定单击事件
2、发起Ajax请求--到服务器添加商品,进行局部刷新(服务端内容有点复杂就不贴了)
3、提示用户,购物车总的商品数量和最后一个添加的商品名称
<div style="text-align: center">
<c:choose>
<c:when test="${ empty sessionScope.cart.items }">
<%-- 购物车为空的情况 --%>
<span id="totalCountSpan"></span>
<div id="lastProductNameDiv">
<span style="color: red">购物车为空!</span>
</div>
</c:when>
<c:otherwise>
<%-- 购物车不为空的情况,显示出购物车的简单信息 --%>
<span id="totalCountSpan">您的购物车中有 ${ sessionScope.cart.totalCount } 件商品</span>
<div id="lastProductNameDiv">
您刚刚将<span style="color: red">${ sessionScope.last_product_name }</span>加入到了购物车中
</div>
</c:otherwise>
</c:choose>
</div>
<script type="text/javascript">
$(function(){
$("a.addItemA").click(function(){
//发起请求
$.getJSON("cartServlet","action=ajaxAddItem&id=" + $(this).attr("itemId") ,function(msg){
// 3、提示用户,购物车总的商品数量和最后一个添加的商品名称
// {lastProductName: "JavaScript从入门到精通", cartTotalCount: 1}
$("#totalCountSpan").html("您的购物车中有 " + msg.cartTotalCount + " 件商品");
$("#lastProductNameDiv").html("您刚刚将<span style=\"color: red\">" + msg.lastProductName + "</span>加入到了购物车中");
});
return false;
});
});
</script>
服务器的代码:
protected void ajaxAddItem(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 1、获取商品编号id。
int id = Utils.parseInt(request.getParameter("id"), 0);
// 2、调用BookService.queryBookById(id):Book
Book book = bookService.queryBookById(id);
// 3、把book图书信息。转换成为CartItem实例
CartItem cartItem = new CartItem(book.getId(), book.getName(), 1,
book.getPrice(), book.getPrice());
// 4、调用cart.addItem(cartItem);
// 应该先从Session中获取Cart购物车对象
Cart cart = (Cart) request.getSession().getAttribute("cart");
// 看看,手里有没有购物车。如果没有,找一辆
if (cart == null) {
cart = new Cart();
request.getSession().setAttribute("cart", cart);
}
cart.addItem(cartItem);
System.out.println(cart);
//把最后一个添加的商品名称,存放到Session中
request.getSession().setAttribute("last_product_name", cartItem.getName());
Map<String, Object> result = new HashMap<String, Object>();
result.put("cartTotalCount", cart.getTotalCount());
result.put("lastProductName", cartItem.getName());
response.getWriter().write(new Gson().toJson(result));
}