Ajax技术之与服务器通信-一个完整的实例(实现检测用户名是否唯一功能)

Ajax用户名检测实例
本文介绍了一个使用Ajax技术实现实时用户名唯一性检测的实例。在用户注册界面中,通过Ajax发送请求到服务器验证用户名是否已存在,即时显示验证结果。

在介绍了向服务器发送请求与处理服务器响应之后,下面将通过一个完整的实例,更好地说明在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>


2、在页面合适位置添加一个用于显示提示信息的<div>标记,并且通过CSS设置该<div>标记的样式。关键代码如下:

<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("恭喜您,该用户名没有被注册!");
	}
%>

运行本实例,在“用户名”文本框中输入“张三”,单机“检查用户名”按钮,将显示“很抱歉,该用户名已经被注册!”提示信息。

注:由于本实例比较简单,这里没有从数据库中获取用户信息,而是将用户信息保存在一个一维数组中。在实际项目开发中,通常情况下是从数据库中获取用户信息。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值