通过GET方式向`/check_username.do`发出请求,带`username=?`参数,希望服务器响应`0`(用户名不存在)或`1`(用户名存在)。
## 核心代码
对响应`/check_username.do`的方法添加`@ResponseBody`注解,在方法中,根据查询结果返回字符串格式的0或1即可。
当添加了`@ResponseBody`注解后,返回的字符串将不再是由`ViewResolver`的前缀和后缀拼接出JSP页面,而是将返回的字符串直接响应给客户端!
## 注解驱动
当需要使用`@ResponseBody`时,必须在Spring的配置文件中添加注解驱动:
<mvc:annotation-driven />
严格的说,AJAX并不算一门语言,只能算一门学科或技术的应用方式,本质上还是JavaScript编程。
## 如何使用
首先,需要获取XMLHttpRequest对象:
var xhr;
xhr = new XMLHttpRequest();
XMLHttpRequest对象有5个核心属性:
- onreadystatechange:当准备状态发生变化
- readyState:准备状态,该属性的值可能是0~4之间的数字,0表示尚未建立连接,4表示接收到响应
- status:响应码,例如404、200
- responseText:响应的字符串
- responseXML:响应的XML
当需要发出请求时,需要使用2个函数:
- open(请求方式, 请求路径, 是否异步)
- send()
使用演示:
// 异步检查用户名是否存在
function checkUsername(username) {
// 获取XMLHttpRequest对象
var xhr = new XMLHttpRequest();
var url = "check_username.do?username="
+ username;
// 配置onreadystatechange
xhr.onreadystatechange = function() {
// 当服务器已经响应(4)且响应码是200时
if (xhr.readyState == 4
&& xhr.status == 200) {
// 服务器的响应将是"0"或"1"
if (xhr.responseText == "1") {
// 表示用户名存在
document.getElementById("username_hint").innerHTML= "用户名正确";
} else {
// 表示用户名不存在
document.getElementById("username_hint").innerHTML = "用户名不存在";
}
}
};
// 调用函数
xhr.open("GET", url, true);
xhr.send();
}
了解过程后,我们可以使用Ajax简洁的方式:
$.ajax({
"url":"${pageContext.request.contextPath}/user/compare.do",
"data":"username="+$("#username").val(),
"type":"post",
"dataType":"json",
"success":function(obj){
//执行成功怎么办
},
"error":function(obj){
//执行失败怎么办
}
});