在介绍了向服务器发送请求与处理服务器响应之后,下面将通过一个完整的实例,更好地说明在Ajax中如何与服务器通信。
问题描述:在某用户注册界面,检测用户输入的用户名是否唯一。
1、创建index.jsp文件,在该文件中添加一个用于收集用户注册信息的表单及表单元素,以及代表“检测用户名”按钮的图片,并在该图片的onclick事件中调用checkName()方法,检测用户名是否被注册。关键代码如下:
<form method="post" action="" name="form1">
用户名:<input name="username" type="text"id="username" size="32"/>
<img src="images/checkBt.jpg" width="104" height="23" style="cursor: hand;"onclick="checkUser(form1.username);">
密码:<input name="pwd1" type="password" size="35"/>
确认密码:<input name="pwd2" type="password" size="35"/>
E-mail:<input name="email" type="text" size="45"/>
<input type="image" name="imageField"src="images/registerBt"/>
</form>
<style type="text/css">
#toolTip{
position: absolute;
left: 331px;
top:39px;
width: 98px;
height: 48px;
padding-top: 45px;
padding-left: 25px;
padding-right: 25px;
z-index: 1;
display: none;
color: red;
background-image: url(images/tooltip.jpg);
}
</style>
<div id="toolTip"></div>3、编写一个自定义的JavaScript函数createRequest(),在该函数中,首先初始化XMLHttpRequest对象,然后指定处理函数,再创建与服务器的连接,最后向服务器发送请求。具体代码如下:
function createRequest(url){
http_request = false;
if(window.XMLHttpRequest){
http_request = new XMLHttpRequest();
}else if(window.ActiveXObject)
{
try{
http_request = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
http_request = newActiveXObject("Microsoft.XMLHTTP");
}catch(e){}
}
}
if(http_request){
alert("不能创建XMLHttpRequest实例!");
return false;
}
http_request.onreadystatechange=getResult;
http_request.open("GET",url,true);
http_request.send(null);
}4、编写回调函数getResult(),该函数主要根据请求状态对返回结果进行处理。在该函数中,如果请求成功,为提示框设置相应的提示内容,并且让提示框显示。具体代码如下:
function getResult(){
if(http_request.readyState==4){ //判断请求状态
if(http_request.status==200){ //请求成功,开始处理返回结果
document.getElementById("toolTip").innerHTML=http_request.responseText;
document.getElementById("toolTip").style.display="block";
}else{
alert("您所请求的页面有错误!");
}
}
}5、编写自定义的JavaScript函数checkUser(),用于检测用户名是否为空,当用户名不为空时,调用createRequest()函数发送异步请求检测用户名是否被注册。具体代码如下:
function checkUser(userName){
if(userName.value==""){
alert("请输入用户名!");
userName.focus();
return;
}else{
createRequest('checkUser.jsp?user='+userName.value);
}
}6、编写检测用户名是否被注册的处理页checkUser.jsp,在该页面中判断输入的用户名是否被注册,并应用JSP内置对象out的println()方法输出判断结果。checkUser.jsp的具体代码如下:
<%@page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String[] userList = {"张三","李四","王五","钱六"}; // 此处就不从数据库获取数据了,这个一维数组表示已被注册的用户名
String user = new String(request.getParameter("user").getBytes("IOS-8859-1"),"UTF-8")//获取用户名,此处需转码,详见《师门技术论坛:字符编码》
Arrays.sort(userList);//对数组排序
int result = Arrays.binarySearch(userList,user); //搜索数组
if(result>-1){
out.println("很抱歉,该用户名已经被注册!");
}else{
out.println("恭喜您,该用户名没有被注册!");
}
%>运行本实例,在“用户名”文本框中输入“张三”,单机“检查用户名”按钮,将显示“很抱歉,该用户名已经被注册!”提示信息。
注:由于本实例比较简单,这里没有从数据库中获取用户信息,而是将用户信息保存在一个一维数组中。在实际项目开发中,通常情况下是从数据库中获取用户信息。
本文介绍了一个使用Ajax技术实现实时用户名唯一性检测的实例。在用户注册界面中,通过Ajax发送请求到服务器验证用户名是否已存在,即时显示验证结果。
2612

被折叠的 条评论
为什么被折叠?



