annotation-driven/>。
预习作业
请按以下步骤预习本章内容:
1.带着以下任务,阅读、学习本章的相关资料
2.标注出本章看不懂或存在疑惑的部分
3.整理、记录学习中的问题
4.熟记本章的英文单词
请到中心听课前,完成下面的作业。
1.背诵英文单词
(1)Ajax(AsynchronousJavaScriptandXML):
(2)JSON(JavaScriptObjectNotation):
2.预习并回答以下问题
阅读本章内容,在作业本上完成以下简答题
(1)在jQuery中如何调用Ajax方法?
(2)Spring中使用什么注解标注方法用以处理Ajax请求?
3.记录预习的问题
记录学习中遇到的问题,填写于下面的横线上,以便集中探讨解决
——————————————————————————————————————
——————————————————————————————————————
——————————————————————————————————————
——————————————————————————————————————
7.1jQuery的Ajax方法
7.1.1概述
我们之前在JSP的学习中学过使用JavaScript原生态实现Ajax局部刷新技术。
围绕着XMLHttpRequest这个Ajax的核心对象,使用其相关属性和方法来实现Ajax局部刷新页面技术。
回顾代码(实现局部刷新的登录功能):
varXMLHttp;
functioncreateXMLHttpRequest(){
if(window.XMLHttpRequest){
XMLHttp=newXMLHttpRequest();
}elseif(window.ActiveObject){
XMLHttp=newActiveObject("Microsoft.XMLHTTP");
}
}
functiondoAjax(){
createXMLHttpRequest();
varname=document.getElementById("uname").value;
varpwd=document.getElementById("upwd").value;
if(XMLHttp!
=null){
XMLHttp.open("POST","LoginServlet?
uname="+name+"&pwd="+pwd,true);
XMLHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
XMLHttp.onreadystatechange=processRequest;
XMLHttp.send(null);
}else{
alert("不能创建XMLHttpRequest对象实例")
}
}
functionprocessRequest(){
if(XMLHttp.readyState==4){
if(XMLHttp.status==200){
varsobj=document.getElementById("login");
varstr=XMLHttp.responseText;
if(str!
="null"){
sobj.innerHTML="欢迎"+str+"登录"+"loginout";
}else{
document.getElementById("error").innerHTML="用户名或密码错误";
}
}
}
}
我们之前使用JavaScript原生态实现Ajax技术,需要编写大量的JavaScript代码,且对于不同的浏览器,创建核心对象XMLHttpRequest的方式也不同,实现起来很麻烦!
我们也学习过jQuery技术,使用jQuery我们已经实现了简化JavaScript相关代码的开发,那么既然Ajax的核心技术就是JavaScript,jQuery自然也对Ajax实现了相关方法的封装,使之变得十分易用,只要编写极少的代码即可实现强大的Ajax功能。
7.1.2Ajax方法
在jQuery中提供了多个实现Ajax技术的方法,如:
$.ajax()、$.post()、$.get()等方法。
这里我们以最底层的jQueryAjax函数$.ajax()来学习。
其他方法的用法相对简单,请大家借助jQueryAPI帮助文档自行学习。
语法:
$.ajax([options]) 其中[options]为可选参数,对应的描述参见下表。
参数名
类型
描述
url
String
发送请求的地址。
type
String
数据请求方式(post或get),默认为get。
data
String
发送到服务器上的数据,如果不是字符串格式则自动转为字符串格式,get方法则附在html请求地址后面。
dataType
String
服务器返回的数据类型,如果不指定,jQuery自动根据HTTP包判断。
可为:
html、script、text、xml、json。
beforeSend
Function
该函数用于发送请求前修改XMLHttpRequest对象。
其中参数就是XMLHttpRequest对象,由于该函数本身是jQuery事件,因此,如果函数返回false,则表示取消本次事件。
complete
Function
请求完成后调用的回调函数,该函数无论数据发送成功或失败都会调用,该函数有两个参数,一个是XMLHttpRequest对象,另一个是strStatus,用于描述成功请求类型的字符串。
success
Function
请求成功后调用的回调函数,该函数有三个参数。
第一个是XMLHttpRequest对象,第二个是strError,第三个是捕捉到的错误对象strObject。
error
Function
请求失败后调用的回调函数,该函数有三个参数,第一个是XMLHttpRequest对象,第二个是出错信息strError,第三个是捕捉到的错误对象strObject。
timeout
Number
请求超时的时间(毫秒),该设置将覆盖$.ajaxSetup()方法中同样的设置。
global
Boolean
是否相应全局事件,默认是true,表示响应,如果设置成false,表示不响应,那么全局事件$.ajaxStart等将不响应。
async
Boolean
是否为异步请求,默认是true,表示是异步,如果设置成false,表示是同步请求。
cache
Boolean
是否进行页面缓存,true表示进行缓存,false表示不进行页面缓存。
traditional
Boolean
是否使用传统的方式传递参数。
目前知道的默认传递数组,后面会加[]。
使用jQuery的Ajax函数来实现之前的登录功能代码如下:
functiondoLoginAjax(){
$.ajax({type:
"GET",
url:
"LoginServlet?
uname="+$("#uname").val()+"&pwd="+$("#upwd").val(),
dataType:
"text",
success:
function(data){
if("null"!
=data){
$("#login").html("欢迎"+data+"登录"+"loginout");
}else{
$("#login").html("用户名或密码错误");
}
}
});
}
通过代码我们可以看出,使用jQuery的Ajax函数封装后的Ajax使用起来非常方便,而且解决了常用浏览器的兼容问题。
7.2SpringMVC中的Ajax
7.2.1概述
在SpringMVC框架中,我们就是通过jQuery来实现Ajax交互的。
由于Ajax是异步请求,其返回的内容不是整个页面,因此在控制器中对于处理Ajax请求的方法我们需要特别的标注,使用@ResponseBody注解来说明当前方法返回的内容将作为Ajax请求的响应数据返回给请求页面,而不再是返回一个完整的页面。
接下来,我们就来看看,在SpringMVC中如何处理各种不同格式的Ajax响应数据。
7.2.2处理文本格式的Ajax响应数据
现在,我们来实现一个简单的Ajax功能,实现注册页面的用户名验证功能。
示例一:
实现注册用户名验证。
步骤:
1.搭建SpringMVC项目框架,并配置注解方式实现映射关系。
2.编写功能页面。
添加jquery支持。
并绑定用户名输入框的blur事件。
3.在blur事件中调用$.ajax()方法实现发送Ajax请求。
4.编写控制器类,并编写处理Ajax请求的方法,并使用@ResponseBody注解标注该方法返回Ajax响应数据。
注册页面编写如下代码: