面试官:你是怎么理解ajax?
<1>.ajax
1.首先先说ajax是什么:
是一种用来改善用户体验的技术,本质上是利用浏览器提供的一个
特殊对象(XMLHttpRequest对象,一般也可以称之为ajax对象)向
服务器发送异步请求;服务器返回部分数据,浏览器利用这些数据
对当前页面做部分更新;整个过程,页面无刷新,不打断用户的操作。
注:异步请求,指的是,当ajax对象发送请求时,浏览器不会销毁
当前页面,用户仍然可以对当前页面做其它操作。
2.ajax与服务器:
3.如何获得ajax对象?
4.利用ajax向服务器发送数据:
step1. 获得ajax对象
比如 var xhr = getXhr();
step2. 调用ajax对象的方法,发送请求
方式一 get请求
xhr.open('get','check.do?adminCode=king',true);
xhr.onreadystatechange = f1;
xhr.send(null);
注:
true: 异步 (浏览器不会销毁当前页面,用户仍然可以
对当前页面做其它操作)
false:同步 (浏览器不会销毁当前页面,但是会锁定当前
页面,用户不能够对当前页面做任何操作)。
方式二 post请求
step3. 编写服务器端的程序
注:不需要返回完整的页面,只需要返回部分数据。
step4. 编写事件处理函数
if(xhr.readyState == 4 &&
xhr.status == 200){
//ajax对象已经获得了服务器返回的所有数据,
//而且服务器处理正确。
var txt = xhr.responseText;
页面更新...
}
以上是js支持的ajax,下面是jQuery对ajax的支持,更为简便。
————————————————————————————————————————————————————
5.jQuery对ajax的支持:
用法:
$.ajax({});
注:{}是一个对象,其属性用来控制ajax对象如何向服务器
发送请求,常见的属性如下。
url: 请求地址(与controller的地址一样)
type: 请求类型
data: 请求参数(可以是请求字符串形式,比如
"adminCode=king&age=22",
还可以是对象形式,比如{"adminCode":"king","age":22})
dataType: 服务器返回的数据类型,有如下类型:
"json" json字符串
"text" 文本
"html" html文档
"xml" xml文档
"script" javascript脚本
success: 绑订事件处理函数(服务器已经返回了所有数据,
并且没有出错)。
error: 绑订事件处理函数(服务器出错了)
比如:
$.ajax({
"url":"check.do",
"type":"get",
"data": "adminCode=king",
"dataType":"text",
"success": function(obj){
//处理服务器返回的数据了
obj就是服务器端返回的数据。
如果返回的是json字符串,会
自动转换成javascript对象。
},
"error": function(){
}
});
注:使用jQuery还有很多向服务器发送异步的请求(如:$Obj.load(),$.post(),等等),这里就不多说了。
<2>json
1.什么是json?
是一种轻量级的数据交换格式。
注:json借鉴了javascript的部分语法
注:数据交换:指的是将要交换的数据转换成一种与平台无关的
数据格式(比如xml),然后发送给接收方来处理。
轻量级:json相对于xml而言,文档更小,解析速度更快。
2.使用json:
1)java对象如何转换成json字符串?
使用jackson提供的api(ObjectMapper)。
2)将json字符串转换成javascript对象?
使用javascript内置对象JSON提供的parse()函数。
3.Spring MVC 提供了 Ajax支持:
1.必须导入Jackson API:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.2.3</version>
</dependency>
2.在控制器上添加@ResponseBody注解,就可以将Java对象(是个Javabean对象)转换成json对象发送给客户端了。