12、JSON、AJAX、i18n

本文详细介绍了JSON作为轻量级数据交换格式的使用,包括在JavaScript和Java中的操作,以及如何转换为对象和字符串。同时,文章讲解了AJAX的基本概念、异步请求的实现,包括原生JavaScript和jQuery中的用法,展示了如何通过AJAX进行局部页面更新。
摘要由CSDN通过智能技术生成

一、JSON

  • JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。JSON采用完全独立于语言的文本格式,而且很多语言都提供了对 json 的支持(包括 C, C++, C#, Java, JavaScript, Perl, Python等)。 这样就使得 JSON 成为理想的数据交换格式。

  • json 是一种轻量级的数据交换格式。

  • 轻量级指的是跟 xml 做比较。

  • 数据交换指的是客户端和服务器之间业务数据的传递格式

1.1 JSON在JavaScript中的使用。

1.1.1 json的定义

json 是由键值对组成,并且由花括号(大括号)包围。每个键由引号引起来,键和值之间使用冒号进行分隔,多组键值对之间进行逗号进行分隔。

json定义示例:

<script type="text/javascript">
	// json的定义
	var jsonObj = {
		"key1":12,
		"key2":"abc",
		"key3":true,
		"key4":[11,"arr",false],
		"key5":{
			"key5_1":551,
			"key5_2":"key5_2_value"
		},
		"key6":[{
			"key6_1_1":6611,
			"key6_1_2":"key6_1_2_value"
		},{
			"key6_2_1":6621,
			"key6_2_2":"key6_2_2_value"
		}],
	}
</script>

1.1.2 json的访问

json 本身是一个对象。

json 中的 key 我们可以理解为是对象中的一个属性。

json 中的 key 访问就跟访问对象的属性一样:

json 对象.key

json访问示例:

<script type="text/javascript">
		alert(typeof(jsonObj));//object json就是一个对象
		alert(jsonObj.key1);//12
		alert(jsonObj.key2);//abc
		alert(jsonObj.key3);//true
		alert(jsonObj.key4);//11,arr,false   得到数组
		// json中数组的遍历
		for(var i = 0;i<jsonObj.key4.length;i++){
			alert(jsonObj.key4[i]);
		}
		alert(jsonObj.key5);//[object Object]
		alert(jsonObj.key5.key5_2);//key5_2_value
		//取出每一个元素都是json对象
		var jsonItem = jsonObj.key6[0];
		alert(jsonItem.key6_1_2);//key6_1_2_value
</script>

1.1.3 json的两个常用方法

json 的存在有两种形式

一种是:对象的形式存在,我们叫它 json 对象。
一种是:字符串的形式存在,我们叫它 json 字符串。

一般我们要操作 json 中的数据的时候,需要 json 对象的格式。

一般我们要在客户端和服务器之间进行数据交换的时候,使用 json 字符串。

JSON.stringify() 把 json 对象转换成为 json 字符串
JSON.parse() 把 json 字符串转换成为 json 对象
<script type="text/javascript">
	//把json对象转换成为json字符串,类似于java中对象的toString
	var jsonObjString = JSON.stringify(jsonObj);//{"key1":12,"key2":true,"key3":"abc","key4":[11,"arr",false]}
	alert(jsonObjString);

	//把json字符串,转换成为json对象
	var jsonObj2 = JSON.parse(jsonObjString);
	alert(jsonObj2);//[object Object]
</script>

1.2 JSON在java中的使用

以使用Gson JAR包进行转换

GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符转成一个Java对象,或者将一个Java转化为Json字符串

两个方法:

  • public String toJson(Objcet obj)方法,可以将对象转化为json字符串
  • public T fromJson(String jsonStr,T.class)方法,可以将json字符串转化为Java对象

首先需要导入gson-2.2.4.jar包

在这里插入图片描述

1.2.1 javaBean和json的互转

//1.javaBean和json的互转
@Test
public void test1(){
    Person person = new Person(1,"国哥好帅!");
    //创建Gson对象实例
    Gson gson = new Gson();
    //toJson方法可以把java对象转换成为json字符串
    String personJsonString = gson.toJson(person);
    System.out.println(personJsonString);//{"id":1,"name":"国哥好帅!"}
    //fromJson把json字符串转换会Java对象
    //第一个参数是json字符串
    //第二个参数是转换回去的java对象类型
    Person person1 = gson.fromJson(personJsonString, Person.class);
    System.out.println(person1);
}

1.2.2 List和json的互转

TypeToken介绍:

TypeToken,它是json提供的数据类型转换器,可以支持各种数据集合类型转换。
先调用TypeToken的构造器得到匿名内部类,再由该匿名内部类对象调用getType()方法得到要转换成的type

方法一:

class PersonListType extends TypeToken<ArrayList<Person>>{

}
public class JsonTest {
    //2.List和json的互转
    @Test
    public void test2(){
        List<Person> personList = new ArrayList<>();
        personList.add(new Person(1,"国哥"));
        personList.add(new Person(2,"康师傅"));
        Gson gson = new Gson();
        
        //把List转换为json字符串
        String personListJsonString = gson.toJson(personList);
        System.out.println(personListJsonString);//[{"id":1,"name":"国哥"},{"id":2,"name":"康师傅"}]
        //将json字符串转换为List
        List<Person> list= gson.fromJson(personListJsonString, new PersonListType().getType());
        System.out.println(list);
    }
}

方法二:(匿名内部类)

//2.List和json的互转
@Test
public void test2(){
    List<Person> personList = new ArrayList<>();
    personList.add(new Person(1,"国哥"));
    personList.add(new Person(2,"康师傅"));

    Gson gson = new Gson();

    //把List转换为json字符串
    String personListJsonString = gson.toJson(personList);
    System.out.println(personListJsonString);
    //将json字符串转换为List
    List<Person> list= gson.fromJson(personListJsonString, new TypeToken<ArrayList<Person>>(){}.getType());//使用匿名内部类
    System.out.println(list);
}

1.2.3 map和json的互转

//3.map和json的互转
@Test
public void test3(){
    Map<Integer,Person> personMap = new HashMap<>();
    personMap.put(1,new Person(1,"国哥好帅"));
    personMap.put(2,new Person(1,"康师傅也好帅"));

    Gson gson = new Gson();
    //把map集合转换成为json字符串
    String personMapJsonString = gson.toJson(personMap);
    System.out.println(personMapJsonString);

    //将json字符串转换为map集合
    Map<Integer,Person> personMap2= gson.fromJson(personMapJsonString, new TypeToken<Map<Integer, Person>>(){}.getType());
    System.out.println(personMap2);
}

二、AJAX请求

2.1 AJAX 简介

  • AJAX 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。
  • ajax 是一种浏览器通过 js 异步发起请求,局部更新页面的技术。
  • Ajax 请求的局部更新,浏览器地址栏不会发生变化
  • 局部更新不会舍弃原来页面的内容

同步和异步处理的问题:

  • 同步处理:

      请求:发送二次请求时,只能等上次请求响应后,才能执行
      效率:就算我们需要刷新局部,也必须刷新整个页面
    
  • 异步处理:

      请求:aJax请求不会影响其他请求
      效率:局部刷新
    

2.2 javaScript 原生 Ajax 请求

2.2.1 原生的 Ajax 请求使用步骤

1、我们首先要创建 XMLHttpRequest 对象
2、调用 open 方法设置请求参数
3、调用 send 方法发送请求
4、在 send 方法前绑定 onreadystatechange 事件,处理请求完成后的操作。

代码示例:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="pragma" content="no-cache" />
		<meta http-equiv="cache-control" content="no-cache" />
		<meta http-equiv="Expires" content="0" />
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Insert title here</title>
		<script type="text/javascript">
			//这里使用javaScript语言发起Ajax请求,访问服务器AjaxServlet中javaScriptAjax
			function ajaxRequest() {
// 				1、我们首先要创建XMLHttpRequest 
				var xmlHttpRequest = new XMLHttpRequest();
// 				2、调用open方法设置请求参数
				xmlHttpRequest.open("GET","http://localhost:8080/16_json_ajax_i18n/ajaxServlet?action=javaScriptAjax",true);
// 				3、在send方法前绑定onreadystatechange事件,处理请求完成后的操作。
				xmlHttpRequest.onreadystatechange = function(){
					//当 readyState 等于 4 且状态为 200 时,表示响应已就绪
					if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200){
						alert(xmlHttpRequest.responseText);
						var jsonObj = JSON.parse(xmlHttpRequest.responseText);
						//把响应的数据显示在页面上
						document.getElementById("div01").innerHTML = "编号:"+jsonObj.id+",姓名:"+jsonObj.name;
					}
				}
// 				4、调用send方法发送请求
				xmlHttpRequest.send();
			}
		</script>
	</head>
	<body>	
		<button onclick="ajaxRequest()">ajax request</button>
		<div id="div01">
		</div>
	</body>
</html>

创建一个 AjaxServlet 程序接收请求:

public class AjaxServlet extends BaseServlet {
    protected void javaScriptAjax(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html; charset=UTF-8");
        System.out.println("Ajax请求过来了");
        Person person = new Person(1,"国哥");

        //json格式字符串
        Gson gson = new Gson();
        String personJson = gson.toJson(person);
        resp.getWriter().write(personJson);
    }
}

2.2.2 XMLHttpRequest介绍

XMLHttpRequest的介绍:

  • XMLHttpRequest对象是AJAX中非常重要的对象,所有的AJAX操作都是基于该对象的。
  • XMLHttpRequest对象用来封装请求报文,我们向服务器发送的请求信息全部都需要封装到该对象中。
  • 获取XMLHttpRequest对象:
    var xmlHttpRequest= new XMLHttpRequest(); //目前主流浏览器都支持
    注意:XMLHttpRequest对象并没有成为标准,但是现在的主流浏览器都支持该对象,而一些如IE6的老版本浏览器中的创建方式有一些区别,但是问题不大。

XMLHttpRequest对象的方法:

方法描述
open(method,url,async)规定请求的类型、URL以及是否异步处理请求
- method:请求的类型:get或post
- url:文件在服务器上的位置
- async:true(异步)或false(同步)
send(string)将请求发送到服务器
- string:仅用于post请求

XMLHttpRequest对象的属性:

在这里插入图片描述

在这里插入图片描述

2.3 jQuery中的AJAX请求

2.3.1 $.ajax()方式

$.ajax({
	type:"请求方式",
	url:"请求路径",
	data:"请求携带参数数据",
	/*格式有两种:
		一:name=value&name=value
		二:{key:value}*/
	dataType:"服务器预期返回值类型,如:'text','json','xml','html'",
	/*常用的数据类型有:
		text 	表示纯文本
		xml 	表示xml数据
		json 	表示json对象*/
	success:function(){
		//请求成功时,被回调
	},
	error:function(){
		//请求失败时,被回调
	}
});

在这里插入图片描述

// ajax请求
$("#ajaxBtn").click(function(){
	$.ajax({
		url:"http://localhost:8080/16_json_ajax_i18n/ajaxServlet",
		data:"action=jQueryAjax",//写成{action:"jQueryAjax"}也可
		type:"GET",
		success:function(data){
			$("#msg").html("编号:"+data.id+",姓名:"+data.name);
		},
		dataType:"json"
	});
});

$.ajax()也可以发送异步请求,只需要把async参数设置为false 即可,默认是true。

<script type="text/javascript">
	function asynfalse(){
		$.ajax({
			type:"post",
			url:"http://localhost:8090/t1",
			async:false, //表示为异步请求
			success:function(data){
				consle.log(data);
			}
		});
	}
</script>

2.3.2 $.get()和 $.post()方式

$.get(url, [data], [callback], [type])

url:待载入页面的URL地址
data:待发送 Key/value 参数。
callback:载入成功时回调函数。
type:返回内容格式,xml, html, script, json, text, _default。
// ajax--get请求
$("#getBtn").click(function(){
	$.get("http://localhost:8080/16_json_ajax_i18n/ajaxServlet","action=jQueryGet",function(data){
		$("#msg").html("get 编号:"+data.id+",姓名:"+data.name);
	},"json");
});

$.post(url, [data], [callback], [type])

url:发送请求地址。
data:待发送 Key/value 参数。
callback:发送成功时回调函数。
type:返回内容格式,xml, html, script, json, text, _default。

// ajax--post请求
$("#postBtn").click(function(){
	$.get("http://localhost:8080/16_json_ajax_i18n/ajaxServlet","action=jQueryPost",function(data){
		$("#msg").html("post 编号:"+data.id+",姓名:"+data.name);
	},"json");
});

2.3.3 $.getJSON()方式

$.getJSON(url, [data], [callback])

url:发送请求地址。
data:待发送 Key/value 参数。
callback:载入成功时回调函数

通过 HTTP GET 请求载入 JSON 数据(get请求,返回类型为json类型)

代码示例:

// ajax--getJson请求
$("#getJSONBtn").click(function(){
	$.getJSON("http://localhost:8080/16_json_ajax_i18n/ajaxServlet","action=jQueryGetJSON",function(data){
		$("#msg").html("getJSONBtn 编号:"+data.id+",姓名:"+data.name);
	});
});

2.3.4 表单序列化 serialize()

serialize()可以把表单中所有表单项的内容都获取到,并以 name=value&name=value 的形式进行拼接。

// ajax请求
$("#submit").click(function(){
	// 把参数序列化
	var formData = $("#form01").serialize();
	$.getJSON("http://localhost:8080/16_json_ajax_i18n/ajaxServlet","action=jQuerySerialize&"+formData,function(data){
		console.log(data);
		$("#msg").html("Serialize 姓名:"+data.username+",密码:"+data.password);
	})
});

servlet代码:

protected void jQuerySerialize(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("jQuerySerialize == 方法调用了");
    String username = req.getParameter("username");
    String password = req.getParameter("password");
    Map<String,String> form = new HashMap<String,String>();

    form.put("username",username);
    form.put("password",password);
    Gson gson = new Gson();
    String formJsonString = gson.toJson(form);
    System.out.println(formJsonString);
    resp.getWriter().write(formJsonString);
}

好的博客:
AJAX总结
javaweb学习总结(三十一)——国际化(i18n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值