我的注册应用在第一次SUBMIT之前AJAX好用,当验证码错了的时候返回后报错 为什么 求解,如果我问题表述的不够详细还可以问,
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
<script>
String.prototype.trim=function(){
return this.replace(/^\s*/,"").replace(/\s*$/,"");
};
var subvalidation={"username":false,"password":false};
var xmlreq=false;
function usernameV(){
document.getElementById("user").innerHTML="validating.....";
if(window.XMLHttpRequest){
xmlreq = new XMLHttpRequest();
}else{
try{
xmlreq=new ActiveObject("Msxml2.XMLHTTP");
}catch(e){
xmlreq=new ACtiveObject("Microsoft.XMLHTTP");
}
}
var username=document.getElementById("username").value;
xmlreq.open("get","usernameValidate?dt="+new Date().getTime()+"&username="+username);
xmlreq.onreadystatechange=execute;
xmlreq.send(null);
}
function execute(){
if(xmlreq.readyState==4){
if(xmlreq.status==200){
var returnValue=xmlreq.responseText;
returnValue=returnValue.trim();
if("ok"==returnValue){
subvalidation.username=true;
document.getElementById("user").innerHTML="username can be used";
alert(subvalidation.username);
}else{
subvalidation.username=false;
document.getElementById("user").innerHTML=returnValue;
}
}else{
document.getElementById("user").innerHTML="username validation failed";
subvalidation.username=false;
}
}
}
function submitForm(){
if(subvalidation.username==false){
alert("用户名已经存在");
return false;
}
var username=document.getElementById("username").value;
if(username.length<3||username.length>10){
alert("用户名长度不对");
return false;
}
var reg=/^[0-9a-zA-Z_]*$/;
if(username.match(reg)==null){
alert("用户名字有非法字符");
return false;
}
if(document.forms[0].password.value!=document.forms[0].password1.value){
alert("密码不同");
return false;
}
return true;
}

</script>    
  </head>
  
  <body>
<form action="regist.do" method="post">
<fieldset>
<legend><br>regist 
</legend>
username:<input type="text" id="username"name="username" value="<%=request.getParameter("username")==null?"":request.getParameter("username") %>" onblur="usernameV();"></input><span id="user"></span><br/>
password:<input type="text" name="password" value="<%=request.getParameter("password")==null?"":request.getParameter("password") %>"></input><br/>
password2:<input type="text" name="password2" value="<%=request.getParameter("password")==null?"":request.getParameter("password") %>"></input><br/>
<br/><input type="text" name="validation"><img src="check?dt="+new Date().getTime() id="img"><a href="javascript:;" onclick="document.getElementById('img').src='check?dt='+new Date().getTime()">change</a>
<span><%String code=(String)request.getAttribute("error_code"); %><%=code==null?"":code %></span>
<input type="submit" value="submit" onclick=" return submitForm();">

</fieldset>
</form>
  </body>
</html>

解决方案 »

  1.   

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
    <script>
    String.prototype.trim=function(){
    return this.replace(/^\s*/,"").replace(/\s*$/,"");
    };
    var subvalidation={"username":false,"password":false};
    var xmlreq=false;
    function usernameV(){
    document.getElementById("user").innerHTML="validating.....";
    if(window.XMLHttpRequest){
    xmlreq = new XMLHttpRequest();
    }else{
    try{
    xmlreq=new ActiveObject("Msxml2.XMLHTTP");
    }catch(e){
    xmlreq=new ACtiveObject("Microsoft.XMLHTTP");
    }
    }
    var username=document.getElementById("username").value;
    xmlreq.open("get","usernameValidate?dt="+new Date().getTime()+"&username="+username);
    xmlreq.onreadystatechange=execute;
    xmlreq.send(null);
    }
    function execute(){
    if(xmlreq.readyState==4){
    if(xmlreq.status==200){
    var returnValue=xmlreq.responseText;
    returnValue=returnValue.trim();
    if("ok"==returnValue){
    subvalidation.username=true;
    document.getElementById("user").innerHTML="username can be used";
    alert(subvalidation.username);
    }else{
    subvalidation.username=false;
    document.getElementById("user").innerHTML=returnValue;
    }
    }else{
    document.getElementById("user").innerHTML="username validation failed";
    subvalidation.username=false;
    }
    }
    }
    function submitForm(){
    if(subvalidation.username==false){
    alert("用户名已经存在");
    return false;
    }
    var username=document.getElementById("username").value;
    if(username.length<3||username.length>10){
    alert("用户名长度不对");
    return false;
    }
    var reg=/^[0-9a-zA-Z_]*$/;
    if(username.match(reg)==null){
    alert("用户名字有非法字符");
    return false;
    }
    if(document.forms[0].password.value!=document.forms[0].password1.value){
    alert("密码不同");
    return false;
    }
    return true;
    }

    </script>    
      </head>
      
      <body>
    <form action="regist.do" method="post">
    <fieldset>
    <legend><br>regist 
    </legend>
    username:<input type="text" id="username"name="username" value="<%=request.getParameter("username")==null?"":request.getParameter("username") %>" onblur="usernameV();"></input><span id="user"></span><br/>
    password:<input type="text" name="password" value="<%=request.getParameter("password")==null?"":request.getParameter("password") %>"></input><br/>
    password2:<input type="text" name="password2" value="<%=request.getParameter("password")==null?"":request.getParameter("password") %>"></input><br/>
    <br/><input type="text" name="validation"><img src="check?dt="+new Date().getTime() id="img"><a href="javascript:;" onclick="document.getElementById('img').src='check?dt='+new Date().getTime()">change</a>
    <span><%String code=(String)request.getAttribute("error_code"); %><%=code==null?"":code %></span>
    <input type="submit" value="submit" onclick=" return submitForm();">

    </fieldset>
    </form>
      </body>
    </html>
      

  2.   

    不清楚你是哪行报错的,最好标志出来,
    还有xmlreq.open("get","usernameValidate?dt="+new Date().getTime()+"&username="+username);中的usernameValidate是从何而来的?
      

  3.   

    usernameValidation是一个servlet 
    第二次的时候 这个username那行的ONBLUR事件没了  然后浏览器报错USERNAME这行