注册页面Ajax检查用户名重复
注册页面Ajax检查用户名重复
IE现在60行报错:'null'为空或不是对象
上代码:
- HTML code
<script type="text/javascript"> var xmlHttp; function createXMLHTTP() { if(window.ActiveXObject) { var browseVersion=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"]; for(var i=0;i<browseVersion.length;i++) { xmlHttp=new ActiveXObject(browseVersion[i]); } } else if(window.XMLHttpRequest) { xmlHttp=new XMLHttpRequest(); } if (!xmlHttp) { window.alert("不能创建XMLHttpRequest对象实例!"); return false; } } function $(id) { return document.getElementById(id); } function CheckUserName(obj,Msg) { if(obj.value=="") { alert( "请输入用户名!") } else { createXMLHTTP(); var url="chkuser.php?name=" + encodeURIComponent(obj.value); xmlHttp.open("GET",url,true); xmlHttp.onreadystatechange=IsExistUserName; xmlHttp.send(null); } } function IsExistUserName() { if(xmlHttp.readyState == 4) /*这是60行*/ { var isValid = xmlHttp.responseText; var exsits = document.getElementById("exsits"); exsits.innerHTML = isValid.substring(0,4); } } </script> <table width="400" border="0" align="center" cellpadding="5" cellspacing="1" bgcolor="#666666"> <tr> <td colspan="2" align="center" bgcolor="#666666" class="STYLE1">增加新用户</td> </tr> <tr> <td width="150" align="right" bgcolor="#FFFFFF">用户名:</td> <td width="250" bgcolor="#FFFFFF"><input name="wyx_name" type="text" size="17" onblur="CheckUserName(this,'msg')"/> <font color=red>*</font><label d="exsits"></label></td> </tr> <tr> <td width="150" align="right" bgcolor="#FFFFFF">密码:</td> <td width="250" bgcolor="#FFFFFF"> <input name="wyx_pass1" type="password" size="18"/> <font color=red>*</font></td> </tr> <tr> <td width="150" align="right" bgcolor="#FFFFFF">重复密码:</td> <td width="250" bgcolor="#FFFFFF"> <input name="wyx_pass2" type="password" size="18"/> <font color=red>*</font></td> </tr> <tr> <td colspan="2" align="center" bgcolor="#FFFFFF"><input type="submit" name="submit" value="提交" /></td> </tr></table>这是chkuser.php页面代码:
- PHP code
<?phpinclude('chek.php');include('../config.php');$name = $_GET[name];$sql="SELECT * FROM wyx_user WHERE wyx_name='$name'";$sql=@mysql_query($sql)if($rs=mysql_fetch_array($sql)){ echo "用户名已存在";}else{ echo "可以注册";}?>------解决方案--------------------
xml.Http没有注册,
createXMLHTTP();这句改为var xml.Http= createXMLHTTP();
[解决办法]
IsExistUserName并未返回任何变量
xmlHttp.onreadystatechange=IsExistUserName是什么意思?
问题应该处在这里,不要用等号带入。
[解决办法]
if(xmlHttp.readyState == 400) /*这是60行*/
[解决办法]
不好意思,看错了。
xml.Http注册了,这个 function CheckUserName(obj,Msg)Msg参数,没看到有什么作用啊。
function CheckUserName(obj,Msg)
{
if(obj.value=="")
{
alert( "请输入用户名!")
}
else
{
createXMLHTTP();
var url="chkuser.php?name=" + encodeURIComponent(obj.value);
xmlHttp.open("GET",url,true);
xmlHttp.onreadystatechange=IsExistUserName;
xmlHttp.send(null);
}
}
function IsExistUserName()
{
if(xmlHttp.readyState == 4) /*这是60行*/
{
var isValid = xmlHttp.responseText;
var exsits = document.getElementById("exsits");
exsits.innerHTML = isValid.substring(0,4);
}
}
改成function CheckUserName(obj,Msg)
{
if(obj.value=="")
{
alert( "请输入用户名!")
}
else
{
createXMLHTTP();
var url="chkuser.php?name=" + encodeURIComponent(obj.value);
xmlHttp.open("GET",url,true);
xmlHttp.onreadystatechange=function (){
if (xml.Http.readyState == 4 && xml.Http.status==200) {
IsExistUserName(xml.Http.responseText);
}
}
xmlHttp.send(null);
}
}
function IsExistUserName()
{
var isValid = xmlHttp.responseText;
var exsits = document.getElementById("exsits");
exsits.innerHTML = isValid.substring(0,4);
}
[解决办法]
1楼的,xmlHttp是全局变量
2楼的,这里没有问题
encodeURIComponent()返回的是utf8格式的字符串,而你的chkuser.php是gb的,
$name = $_GET[name];这里应coniv一下
[解决办法]
看不出什么问题
[解决办法]
不跨域,就用JQUERY嘛,我一直用.好用啊~ .
[解决办法]
用jquery把 哈哈
[解决办法]
var xmlHttp;
改为
var xmlHttp = createXMLHTTP();
[解决办法]
<label d="exsits"></label>
这句有问题,之后是写不进去的。
exsits.innerHTML = isValid.substring(0,4);
[解决办法]
注意!你在其他function中确实注册过xmlHttp,但这是在函数内部注册的,只能作为局部变量,并不能作用为全局变量。
你在IsExistUserName()这个function中并没有注册过xmlHttp。
正确的做法应该是在所有函数的外部调用下createXMLHTTP()方法。
- JScript code
<script type="text/javascript"> function createXMLHTTP() { if(window.ActiveXObject) { var browseVersion=["Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"]; for(var i=0;i<browseVersion.length;i++) { xmlHttp=new ActiveXObject(browseVersion[i]); } } else if(window.XMLHttpRequest) { xmlHttp=new XMLHttpRequest(); } if (!xmlHttp) { window.alert("不能创建XMLHttpRequest对象实例!"); return false; } } var xmlHttp = createXMLHTTP(); function $(id) { return document.getElementById(id); } function CheckUserName(obj,Msg) { if(obj.value=="") { alert( "请输入用户名!") } else { createXMLHTTP(); var url="chkuser.php?name=" + encodeURIComponent(obj.value); xmlHttp.open("GET",url,true); xmlHttp.onreadystatechange=IsExistUserName; xmlHttp.send(null); } } function IsExistUserName() { if(xmlHttp.readyState == 4) /*这是60行*/ { var isValid = xmlHttp.responseText; var exsits = document.getElementById("exsits"); exsits.innerHTML = isValid.substring(0,4); } } </script>
[解决办法]
好像还有点问题,createXMLHTTP()方法最后需要return xmlhttp;一下。
[解决办法]
用ff的firebug调试下看看。。。有可能是你哪里写错了。
[解决办法]
我这里报错是这句:
xmlHttp=new ActiveXObject(browseVersion[i]);
错误: Automation 服务器不能创建对象
用 try 吧:
- JScript code
function createXMLHTTP(){ try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch(oc) { xmlHttp = null; } } if(!xmlHttp && typeof XMLHttpRequest != "undefined") { xmlHttp = new XMLHttpRequest(); } if (!xmlHttp) { window.alert("不能创建XMLHttpRequest对象实例!"); return false; }}
[解决办法]
学习
jf