AJAX异步请求

Ajax即:Asynchronous JavaScript And XML(异步JavaScript和XML)。

在JavaScript中,通过AJAX可以发出异步请求,即由子线程发出请求,且将由子线程获取响应结果,则主线程可以不参与,表现为浏览器中显示的页面内容可以不发生变化。

基于jQuery的AJAX访问,可以调用jQuery中的$.ajax()函数,该函数的参数是一个JSON对象,需要至少为该JSON对象配置5个属性:

JSON类型

JSON数据中,整个数据是一个**JSON对象**,对象中可以有多组**属性与值**的配置,各组之间使用逗号(`,`)进行分隔,而**属性名称**与**属性值**之间使用冒号(`:`)进行分隔,**属性名称**是字符串类型的数据,需使用一对引号框住,**属性值**可以是任意数据类型,如果是数值型或布尔型,可以直接写,不需要使用引号,如果是字符串类型,则需要使用引号框住。

JSON数据是在JavaScript语言中可以直接识别的数据类型,无需使用任何解析技术:

	

在JSON数据中,每个属性的值还可以是另一个JSON对象,另外,在JSON中也有**数组**的概念,每个属性的值都可以是一个数组,例如:

{
	"username":"root",
	"age":25,
	"phone":"13800138001",
	"email":"root@163.com",
	"department":{
		"id":3,
		"name":"RD"
	},
	"skill":["Java","MySQL","SSM"]
}

//可以通过下标访问数组元素
console.log("skill-1=" + data.skill[0]);
console.log("skill-2=" + data.skill[1]);
console.log("skill-3=" + data.skill[2]);

在JSON的数组其实也是相对于JavaScript这门语言的数组,所以,某个属性是数组类型,对于JavaScript语言来说,就是一个数组,也是有`length`属性的,所以,在操作数组类型的数据时,也可以进行循环或遍历:

    for (var i = 0; i < data.skill.length; i++) {
		console.log("skill[" + i + "]=" + data.skill[i]);
	}

可以通过`JSON.parse(str)`将字符串转换为JSON对象,例如:

var str = '{"username":"admin","password":"123456","age":28}'
var data = JSON.parse(str);

服务器端向客户端响应JSON格式的数据

当服务器处理请求的方法添加了`@ResponseBody`注解后,表示响应正文,且返回值类型是`String`时,会将方法返回值中的字符串响应给客户端,但是,默认的响应头中的配置是:Content-Type: text/html;charset=ISO-8859-1 所以,默认的响应方式是不支持中文的!

正确的做法是自定义某个类型,用于表示所需要响应的数据内容:

	public class JsonResult {
		// 操作状态,即成功或失败
		private Integer state;
		// 操作失败时的提示消息
		private String message;
		// 响应给客户端的数据
		private T data;
	}

当创建对象并为属性赋值后,表示将响应的JSON数据例如:

{"state":0,"message":"xxx","data":xxx}

使用这种响应结果时,必须添加Jackson依赖:


	com.fasterxml.jackson.core
	jackson-databind
	2.9.8

在使用之前,还应该在Spring的配置文件中配置注解驱动:


该框架的作用就是将返回的对象组织成JSON格式,并将响应头中的`Content-Type`进行设置:

Content-Type: application/json;charset=UTF-8

在应用时,将控制器中处理请求的方法的返回值设置为`JsonResult`类型,并返回该类型的对象即可,最终,客户端就会收到与返回对象相匹配的JSON字符串,例如:

{"state":1,"message":"注册成功","data":null}

之所以将Jackson依赖添加到项目中就可以直接使用,是因为:当响应正文时,SpringMVC框架会根据匹配的转换器(Converter)将方法的返回值转换为响应的正文,并决定响应头的相关信息,在SpringMVC使用Converter时有一定的优先级,例如当方法的返回值是`String`时,优先级是较高的,会自动使用`StringHttpMessageConverter`转换器,当添加了Jackson依赖时,凡是返回值类型是SpringMVC默认不支持的,就会自动应用Jackson中的转换器,而Jackson中的转换器主要就设置了响应头中的`Content-Type`及将返回的对象转换为JSON格式。

你可能感兴趣的:(AJAX)