注册页面Ajax检查用户名重复IE现在60行报错:'null'为空或不是对象上代码:    <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
include('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 "可以注册";
}?>

解决方案 »

  1.   

    xml.Http没有注册,
    createXMLHTTP();这句改为var xml.Http= createXMLHTTP();
      

  2.   

    IsExistUserName并未返回任何变量
    xmlHttp.onreadystatechange=IsExistUserName是什么意思?
    问题应该处在这里,不要用等号带入。
      

  3.   

    if(xmlHttp.readyState == 400)  /*这是60行*/
      

  4.   

    不好意思,看错了。
    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);
             }
      

  5.   

    1楼的,xmlHttp是全局变量
    2楼的,这里没有问题encodeURIComponent()返回的是utf8格式的字符串,而你的chkuser.php是gb的,
    $name = $_GET[name];这里应coniv一下
      

  6.   

    不跨域,就用JQUERY嘛,我一直用.好用啊~ .
      

  7.   

    var xmlHttp;
    改为
    var xmlHttp = createXMLHTTP();
      

  8.   

    <label d="exsits"></label>
    这句有问题,之后是写不进去的。
    exsits.innerHTML = isValid.substring(0,4);
      

  9.   

    注意!你在其他function中确实注册过xmlHttp,但这是在函数内部注册的,只能作为局部变量,并不能作用为全局变量。
    你在IsExistUserName()这个function中并没有注册过xmlHttp。正确的做法应该是在所有函数的外部调用下createXMLHTTP()方法。<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>    
      

  10.   

    好像还有点问题,createXMLHTTP()方法最后需要return xmlhttp;一下。
      

  11.   

    用ff的firebug调试下看看有可能是你哪里写错了。
      

  12.   

    我这里报错是这句:
    xmlHttp=new ActiveXObject(browseVersion[i]);
    错误: Automation 服务器不能创建对象用 try 吧:
    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;
    }
    }
      

  13.   

    <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;
    }
    return xmlHttp; }
    function $(id)
    {
    return document.getElementById(id);
    }
    function CheckUserName(obj,Msg)
    {
       
    if(obj.value=="")
    {
    alert( "请输入用户名!")
    }
    else

    xmlHttp= 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)
    {
    var isValid = xmlHttp.responseText;
    var exsits = document.getElementById("exsits"); 
    exsits.innerHTML = isValid.substring(0,4);

     }
    </script>
    这样就行了。。
      

  14.   

    return xmlHttp;   //增加一个return