Ajax最为网页异步交互技术相信大家并不陌生,这里我也不做过多介绍,详情点击(百度百科)。很多框架也封装了Ajax技术,使用起来更加简单,比如jQuery等等,这里为了了解原理,我们使用原生的Ajax。
我们以注册用户时,判断用户ID是否存在为例,实现一个最简单的异步请求,当我们鼠标离开输入框时自动判该用户ID是否存在,同时我们可以继续填写其他注册信息。
界面如下:

HTML代码:
<span style="font-family:KaiTi_GB2312;font-size:18px;"><input name="userId" type="text" class="text1" id="userId"
size="10" maxlength="10" onkeypress="userIdOnKeyPress()" value="<%=userId %>" onblur="validate(this)">
<span id="spanUserId"></span></span>
创建Ajax核心对象XMLHttpRequest:
<span style="font-family:KaiTi_GB2312;font-size:18px;">var xmlHttp;
function createXMLHttpRequest() {
//表示当前浏览器不是ie,如ns,firefox
if(window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
} else if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}</span>
光标离开响应事件
<span style="font-family:KaiTi_GB2312;font-size:18px;">function validate(field) {
//alert(document.getElementById("userId").value);
//alert(field.value);
if (trim(field.value).length != 0) {
//创建Ajax核心对象XMLHttpRequest
createXMLHttpRequest();
var url = "user_validate.jsp?userId=" + trim(field.value) + "&time=" + new Date().getTime();
//设置请求方式为GET,设置请求的URL,设置为异步提交
xmlHttp.open("GET", url, true);
//将方法地址复制给onreadystatechange属性
//类似于电话号码
xmlHttp.onreadystatechange=callback;
//将设置信息发送到Ajax引擎
xmlHttp.send(null);
} else {
document.getElementById("spanUserId").innerHTML = "";
}
}</span>
Ajax引擎状态改变时回调方法
<span style="font-family:KaiTi_GB2312;font-size:18px;">function callback() {
//alert(xmlHttp.readyState);
//Ajax引擎状态为成功
if (xmlHttp.readyState == 4) {
//HTTP协议状态为成功
if (xmlHttp.status == 200) {
if (trim(xmlHttp.responseText) != "") {
//alert(xmlHttp.responseText);
document.getElementById("spanUserId").innerHTML = "<font color='red'>" + xmlHttp.responseText + "</font>"
}else {
document.getElementById("spanUserId").innerHTML = "";
}
}else {
alert("请求失败,错误码=" + xmlHttp.status);
}
}</span>
目标jsp(设置休眠时间5秒,如果异步请求设置为false的话,这5秒钟内用户不能进行任何操作)
<span style="font-family:KaiTi_GB2312;font-size:18px;"><%
Thread.currentThread().sleep(5000);
String userId = request.getParameter("userId");
if (UserManager.getInstance().findUserById(userId) != null) {
out.println("用户代码已经存在");
}
%></span>
因为我们这里给大家演示异步请求,所以异步请求值设为了true,这段时间内用户是可以继续输入其他信息的,等到5秒时间到了,会自动弹出用户已经存在
效果图
Ajax 的核心是 JavaScript 对象 XmlHttpRequest,它是一种支持异步请求的技术。简而言之,XmlHttpRequest 使您可以使用 JavaScript 向服务器提出请求并处理响应,而不阻塞用户。以上内容为实践中总结的经验,有不足之处请大家批评指正。