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 向服务器提出请求并处理响应,而不阻塞用户。以上内容为实践中总结的经验,有不足之处请大家批评指正。