使用Ajax实现验证是否有该用户名,如果有,则弹出提示框 已有该用户名 如果没有,则弹出可以使用该用户名。
问题:提示用户用户名不能为空的onblur事件可以实现,但是无法验证用户名??
************************************************************
代码
reg.jsp
*****
<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
<title>注册页面</title>
<script type="text/javascript">
function checkUser(ouser){
var uname=ouser.value;
if(!uname){
alert("用户的账号不能为空!");
ouser.focus();
return;
}
//创建get请求的字符串
var url="servlet/DoReg?uname="+uname;
//创建一个XMLHttpRequest对象
xmlHttpRequest=createXmlHttpRequest();
//设置回调函数
xmlHttpRequest.onreadystatechange=haoLeJiaoWo;
//初始 xmlHttpRequest
xmlHttpRequest.open("get",url,true);
//发送请求
xmlHttpRequest.send(null);
}
function haoLeJiaoWo(){
if(xmlHttpRequest.readystate==4 && xmlHttpRequest.status==200){
var result=xmlHttpRequest.responseText;
//空格去除
result=result.replace(/(^\s*)|(\s*$)/g,"");
if(result=="true"){
alert("用户名已经存在!");
}else{
alert("用户名可以使用!");
}
}
}
function createXmlHttpRequest(){
if(window.XMLHttpRequest){
return new XMLHttpRequest();
}else{
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
</script>
</head>
<body>
<form name="myform" action="servlet/DoReg" method="get">
<table align="center">
<tr>
<td>用户账号:<input name="uname" onblur="checkUser(this)"><td>
</tr>
</table>
</form>
</body>
</html>
****************************
DoReg.java
********
package com.pb.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DoReg extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String uname=req.getParameter("uname");
PrintWriter out=resp.getWriter();
boolean UExsixt=false;
if("accp".equals(uname)){
UExsixt=true;
out.print(UExsixt);
}else{
out.print(UExsixt);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doGet(req, resp);
}
}
*********
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>DoReg</servlet-name>
<servlet-class>com.pb.servlet.DoReg</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DoReg</servlet-name>
<url-pattern>/servlet/DoReg</url-pattern>
</servlet-mapping>
</web-app>
*****************
目录结构

********************************************
Tomcat中的server.xml文件中配置了一段代码(红色部分)
在这一端吧:
var result=xmlHttpRequest.responseText;
//空格去除result=result.replace(/(^\s*)|(\s*$)/g,"");
建议先看能不能获取到返回值,然后alert()一下,对症下药。
去掉WebRoot是不可以的,报错找不到Reg.jsp.
在result处alert没有值...
function haoLeJiaoWo(){
if(xmlHttpRequest.readystate==4 && xmlHttpRequest.status==200){
var result=xmlHttpRequest.responseText;
//空格去除
result=result.replace(/(^\s*)|(\s*$)/g,"");
if(result=="true"){
alert("用户名已经存在!");
}else{
alert("用户名可以使用!");
}
}
}
红色部分去掉xmlHttpRequest.readystate==4
会显示用户名已经存在/用户名可以使用
但是输入正确的时候第一次会显示 用户名可以使用!
在此点击会出现两次 用户名已经存在!
那既然确定页面没有问题,问题就可能出在Servlet上了,在doGet()里修改下:
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
boolean UExsixt=false;
if("accp".equals(uname)){
UExsixt=true;
}
out.print(UExsixt);
out.flush();
out.close();
当然了,你最好把返回给客户端的值改为 String,毕竟你使用的是:
var result=xmlHttpRequest.responseText;
还有就是不要用正则表达式去处理简单的字符串,影响性能不说,表达式的正确性你敢保证吗?