iptton 发表于 2006-10-27 17:32

AJAX...[解决]

问题是这样的:
open 打开的是xml文件时,responseText正常
open 打开的是php文件时,responseText
( 用alert(xhr.responseText) )
浏览器提示:system does not support the specified coding

是不是编码的问题?(用xml时显示中文也出现问题,但php文件echo的是英文也不行,什么也不显示,alert(xhr.responseText)语句得到上面的出错提示)

所有源代码上都没有设header之类的语句。


已解决:php.ini中设 default_charset = "gb2312"

index.php部分代码:

<formname="loginform" method="POST" action="">
   
    帐号:
<input name="logid" type="text" id="logid" onBlur="checkid(this)" size="20"/>
<span id="n1" class="notic"></span><br />
    密码:
<input name="logpass" type="password" id="logpass" onBlur="checkpass(this);" size="20"/>
<span id="n2" class="notic"></span><br />
<input type="radio" name="logtype" value="manage" />
    管理员
<input type="radio" name="logtype" value="teacher"/>
    教师
<input type="radio" name="logtype" value="student" checked/>
    学生<br />
<input name="button" type="button"onClick="checkinput()" value="登陆"/>
<input name="reset" type="reset" value="重置" />
<input type="hidden" name="index">
</form>
<script language="javascript">
//提示帐号输入的错误
    var xhr=false;
    var xhrmethod="POST";
        var xhrurl="test.xml";
        var xhrasyn=true;
    function xhrcallback(){
                alert("xhrcallbacking...");
                try{
                        tmp=xhr.responseText;
                }catch(e){
                        alert("不能赋值");
                }
                try{
                        alert(String(tmp));
                }catch(e)
                {
                        alert("A OH!!!");
                }
               
                alert("outing...");
                document.title="登陆成功";
        }

        function checkid(t)
        {
       
          //只充许输入数字
                var reg=/^\d+$/;
               
                if(!(t.value.match(reg)))
                        n1.innerHTML="错误帐号";
                else
                        n1.innerHTML="";
        }
       
        function checkpass(t)
        {
                if(t.value.length<1)
                        n2.innerHTML="请输入密码!";
                else
                        n2.innerHTML="";
        }
       
        function checkinput(){
                var t=document.forms["loginform"];
                var ltype;
                checkid(t.logid);
                checkpass(t.logpass);
                       
                for(i=0;i<3;i++)
                        if(t.logtype.checked)
                                ltype=t.logtype.value;
                       
                if(n1.innerHTML=="" && n2.innerHTML==""){
                        xhrurl=ltype+"login.php";
                        //xhrurl="test.xml";
                        var postvar="&id="+escape(t.logid.value)+"&pass="+escape(t.logpass.value);
                        t.disabled=true;
                        tisi.style.zIndex=2;
                        startXHR();
                        xhr.send(postvar);
                }
        }
</script>
<script language="javascript" src="js/ajaxfns.js"></script>




js/ajaxfns.js

function startXHR(){
        xhr=null;
        creatXHR();
       
        xhr.onreadystatechange=setStateHandle;
        xhr.open(xhrmethod,xhrurl,xhrasyn);//若改成xhr.open(xhrmethod,"abc.xml",xhrasyn)则没问题。
        if(xhrmethod=="POST")
               xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        if (xhr.overrideMimeType) {
                xhr.overrideMimeType('text/xml');
        }
}

function creatXHR(){
        if(window.ActiveXObject)
                xhr=new ActiveXObject("Microsoft.XMLHTTP");       
        else
                xhr=new XMLHttpRequest();
}

function setStateHandle(){
        if(xhr.readyState==4){
                if(xhr.status==200){
                        xhrcallback();
                }       
        }       
}


[ 本帖最后由 iptton 于 2006-11-3 20:01 编辑 ]

powerwind 发表于 2006-10-27 17:36

xhr=null;
这个不可以是局部变量吧?
你先试试看

iptton 发表于 2006-10-27 17:42

不是这个问题。。。。

open("POST","test.xml",true);如果把上面的代码改成这样就没问题了(事实还有个问题:中文乱码)
页: [1]
查看完整版本: AJAX...[解决]