Ajax验证用户名是否重复的简单的问题(无数据库)

双人鱼XKQ 发布于 2012/12/19 07:10
阅读 1K+
收藏 0

使用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);
}
}

**************************************
web.xml配置

*********

<?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文件中配置了一段代码(红色部分)


加载中
0
华兹格
华兹格

在这一端吧:

var result=xmlHttpRequest.responseText;

  //空格去除

  result=result.replace(/(^\s*)|(\s*$)/g,"");

建议先看能不能获取到返回值,然后alert()一下,对症下药。


双人鱼XKQ
双人鱼XKQ
帮帮我。。。
华兹格
华兹格
还有,docBase是不是么有WebRoot目录??
0
沉寂brain
沉寂brain
这种功能直接试用插件吧
0
双人鱼XKQ
双人鱼XKQ

去掉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

会显示用户名已经存在/用户名可以使用

但是输入正确的时候第一次会显示   用户名可以使用!

在此点击会出现两次   用户名已经存在!

0
华兹格
华兹格

那既然确定页面没有问题,问题就可能出在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();

0
华兹格
华兹格

当然了,你最好把返回给客户端的值改为 String,毕竟你使用的是:

var result=xmlHttpRequest.responseText;

还有就是不要用正则表达式去处理简单的字符串,影响性能不说,表达式的正确性你敢保证吗?

0
我不会抽烟
我不会抽烟
楼主知道不知道用jquery的ajax如何去实现这个啊?
返回顶部
顶部