在家研究ajax,看了别人的一个网上购物商城项目的源代码,自己也来仿别人的东西练习练习,没想出问题了!一下的这些代码是我仿照别人写的。我是想让注册的人填写用户名,光标离开用户名后面的填写空白处后立刻利用ajax连接到一个check.jsp的动态页面并把填写的名字传到这个动态页面。这个check.jsp通过查询数据库得知注册名有没有被用过,用过就返回<msg>register_fial</msg>没有用过就返回<msg>register_success</msg>如果发现是没有填写东西是空的就返回<msg>register_blank</msg>,通过返回的标签在用户填写好的注册名旁边提示注册用户该用户名是否能用。可是结果并没有我想的那样出现提示。结果是什么也不显示我在家慢慢调试看看是什么地方出问题了可是也没有调好。现在把代码发给大家希望大家帮帮忙。看看我到底是什么地方出了问题导致没有出现我想要的结果!谢谢了。我再补充一点这个页面的静态HTML页面是我从别人那抄过来的(意思就是说版权归原作者所有本人审美眼光极差所以不做静态HTML)。
<%@ page language="java" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head>
<title>在线超市注册</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="keywords"
content="Discuz!,Board,Comsenz,forums,bulletin board,">
<meta name="description" content="专区  - Discuz! Board">
<meta name="generator" content="Discuz! 4.0.0RC4 with Templates 4.0.0">
<meta name="MSSmartTagsPreventParsing" content="TRUE">
<meta http-equiv="MSThemeCompatible" content="Yes">
<%
request.setCharacterEncoding("GBK");
%>
<script type="text/javascript">
var req;
function validate(){
var userName = document.getElementById("userid");
var url = "check.jsp?id=" + escape(userName.Value);
if(window.XMLHttpRequest){
req = new XMLHttpRequest();
} else if(window.ActiveXObject){
req = new ActiveXObject("Microsoft.XMLHTTP");
}
req.open("GET",url,true);
req.onreadystatechange = callback;
req.send(null);
}//连接check.jsp?id=用户名,
function callback(){
if(req.readyState==4){
if(req.status==200){
var msg = req.responseXML.getElementsByTagName("msg")[0];
setMsg(msg.childNodes[0].nodeValue);
}
}
}//如果发现check.jsp正常返回<msg></msg>标签则取出标签中的内容
function setMsg(msg){
mdiv = document.getElementById("usermsg");
if(msg == "register_fail"){
mdiv.innerHTML = "<font color='red'>抱歉用户名已经存在,请换一个名字!</font>"; 
} else if(msg == "register_success"){
mdiv.innerHTML = "<font color='red'>恭喜你!该用户名还没有被注册你可以使用这个用户名</font>";
} else if(msg == "register_blank"){
mdiv.innerHTML = "<font color='blue'>请填入你的用户名</font>"
}
}//根据标签内容提示用户!
function check_password(){
var passwd1 = document.getElementById("password1");
var passwd2 = document.getElementById("password2");
var url = "checkpassword.jsp?pass1="+escape(passwd1.Value)+"pass2="+escape(passwd2.Value);
if(req==null){
if(window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if(window.ActiveXObject){
req = new ActiveXObject("Microsoft.XMLHTTP")
}}
req.open("GET",url,true);
req.onreadystatechange=change;
req.send(null);
}//这个是我自己写的检测密码的东西可以不看
function change(){
var passmsg = document.getElementById("passwordmsg");
if(req.readyState==4){
if(req.status==200){
var msg = req.responseXML.getElementsByTagName("msg")[0];
if(msg.childNodes[0].nodeValue=="password_blank"){
passmsg.innerHTML="<font color="green">密码不能为空</font>";
} if(msg.chileNodes[0].nodeVlaue=="password_fail") {
passmsg.innerHTML="<font color="green">两次密码不同</font>";
} if(msg.chileNodes[0].nodeVlaue=="password_success") {
passmsg.innerHTML="<font color="green">密码通过验证</font>";

}
}
}//这个也是我自己写的检测密码的东西可以不看
</script>
<style type="text/css">
<!--
a {
text-decoration: none;
color: #000000
}a:hover {
text-decoration: underline
}body {
scrollbar-base-color: #F3F6FA;
scrollbar-arrow-color: #4D76B3;
font-size: 12px;
background-color: #ffffff
}table {
font: 12px Verdana, Tahoma;
color: #000000
}input,select,textarea {
font: 11px Verdana, Tahoma;
color: #000000;
font-weight: normal;
background-color: #F3F6FA
}select {
font: 11px Verdana, Tahoma;
color: #000000;
font-weight: normal;
background-color: #F3F6FA
}.nav {
font: 12px Verdana, Tahoma;
color: #000000;
font-weight: bold
}.nav a {
color: #000000
}.header {
font: 11px Verdana, Tahoma;
color: #FFFFFF;
font-weight: bold;
background-image: url("images/green/bg01.gif")
}.header a {
color: #FFFFFF
}.category {
font: 11px Verdana, Tahoma;
color: #000000;
background-color: #EFEFEF
}.tableborder {
background: #4D76B3;
border: 0px solid #4D76B3
}.singleborder {
font-size: 0px;
line-height: 0px;
padding: 0px;
background-color: #F3F6FA
}.smalltxt {
font: 11px Verdana, Tahoma
}.outertxt {
font: 12px Verdana, Tahoma;
color: #000000
}.outertxt a {
color: #000000
}.bold {
font-weight: bold
}.altbg1 {
background: #F3F6FA
}.altbg2 {
background: #FFFFFF
}
-->
</style>
<script language="JavaScript" src="images/common.js"></script>
<style type="text/css" id="defaultPopStyle">
.cPopText {
font-family: Tahoma, Verdana;
background-color: #FFFFCC;
border: 1px #000000 solid;
font-size: 12px;
padding-right: 4px;
padding-left: 4px;
height: 20px;
padding-top: 2px;
padding-bottom: 2px;
visibility: hidden;
filter: Alpha(Opacity = 80)
}
</style>
</head>
<body leftmargin="0" rightmargin="0" topmargin="0"
onkeydown="if(event.keyCode==27) return false;">
<div id="popLayer" style="position: absolute; z-index: 1000;"
class="cPopText"></div>
</head> <table id="table1" align="center" border="0" cellpadding="0"
cellspacing="0" width="97%">
<tbody>
<tr valign="top">
<td
style="border-top: 0px none; border-right: 1px none; font-size: 9pt; font-family: Tahoma, Verdana; color: rgb(0, 0, 0);"
width="100%">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td bgcolor="#4d76b3" height="20">
&nbsp;
</td>
</tr>
<tr>
<td>
<table id="table3" bgcolor="#f3f6fa" cellpadding="3"
cellspacing="0" width="100%">
<tbody> <tr bgcolor="#4d76b3">
<td colspan="2" height="1">
</td>
</tr>
<tr bgcolor="#ffffff">
<td colspan="2" height="5"></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<table style="table-layout: fixed;" align="center" border="0"
cellpadding="0" cellspacing="0" width="97%">
<tbody>
<tr>
<td class="nav" align="left" nowrap="nowrap" width="90%">
&nbsp;在线超市 &#187; 注册e
</td>
<td align="right" width="10%">
&nbsp;
</tr>
</tbody>
</table>
<br> <form method="post" name="register" action="Register.jsp"
onSubmit="this.regsubmit.disabled=true;">
<input type="hidden" name="action" value="register" /> <table class="tableborder" align="center" cellpadding="4"
cellspacing="1" width="97%">
<tbody>
<tr>
<td colspan="2" class="header">
注册 - 必填内容
</td>
</tr>
<tr>
<td class="altbg1" width="21%">
用户名:
</td>
<td class="altbg2">
<input id="userid" name="username" size="25" maxlength="25"
type="text" onBlur="validate()">
<span id="usermsg"></span>
</tr>
<tr>
<td class="altbg1">
密码:
</td>
<td class="altbg2">
<input name="password" size="25" type="password" id="password1">
</td>
</tr>
<tr>
<td class="altbg1">
确认密码:
</td>
<td class="altbg2">
<input name="password2" size="25" type="password" id="password2"
onBlur="check_password()">
<span id="passwordmsg"></span>
</td>
</tr>
<tr>
<td class="altbg1">
&#30005;&#35805;:
</td>
<td class="altbg2">
<input name="phone" type="text" id="phone" size="25">
</td>
</tr>
<tr>
<td class="altbg1" valign="top">
送货地址:
</td>
<td class="altbg2">
<textarea name="addr" cols="60" rows="5" id="addr"></textarea>
</td>
</tr>
</tbody>
</table>
<br>
<center>
<input name="regsubmit" value="提 &nbsp; 交" type="submit">
</center>
</form> <script language="JavaScript">
document.register.username.focus();
</script> <p align="center">
</p>
<table class="smalltxt" cellpadding="4" cellspacing="0" width="100%">
<tbody>
<tr class="altbg1">
<td>
&nbsp;
</td>
<td align="right">
&nbsp;
</td>
<td align="right" width="1">
&nbsp;
</td>
</tr>
<tr style="padding: 0px; font-size: 0px; line-height: 0px;" images=""
green="" bg01.gif="")="">
<td colspan="3">
</td>
</tr>
</tbody>
</table>
<p align="center"> <br>
<a name="bottom"></a> <a target="_blank" href="index.htm"><u>在线商城</u>
</a>
<!--<br><font color=#ebebeb></p>
</body></html>

解决方案 »

  1.   

    先看msg是否正确返回
    var msg = req.responseXML.getElementsByTagName("msg")[0];
    alert(msg);
    如果msg正确返回就看下setMsg(msg)函数
    function setMsg(msg){
         alert(msg);
         ……
    }
    另外看下返回的<msg>register_fial </msg>是否包含空格
      

  2.   

    function change(){
        var passmsg = document.getElementById("passwordmsg");
            if(req.readyState==4){
                if(req.status==200){
                    var msg = req.responseXML.getElementsByTagName("msg")[0];
                    if(msg.childNodes[0].nodeValue=="password_blank"){
                        passmsg.innerHTML="<font color="green">密码不能为空</font>";
                    } if(msg.chileNodes[0].nodeVlaue=="password_fail") {
                        passmsg.innerHTML="<font color="green">两次密码不同</font>";
                    } if(msg.chileNodes[0].nodeVlaue=="password_success") {
                        passmsg.innerHTML="<font color="green">密码通过验证</font>";
                    } 
                }
            }
        }//这个也是我自己写的检测密码的东西可以不看
    "<font color="green">密码不能为空</font>";这里的引号可以这么写吗?
      

  3.   

    第一、你在check.jsp打印一下,看有没有验证成功
    第二、建议不用套上标签,直接输出那个字符串就可以
    然后前台用var msg = req.responseText 就行了