初学Ajax书中有这样一个例子:var XMLHttp=new ActiveXObject('Microsoft.XMLHTTP');
XMLHttp.open('GET','http://localhost/books.XML',false);
XMLHttp.send();
alert(XMLHttp.responseBody);但是Error:类型不匹配。我只知道responseBody返回的结果是二进制的,哪位高手来帮我解释一下

解决方案 »

  1.   

    var XMLHttp=new ActiveXObject('Microsoft.XMLHTTP');你用的是微软的浏览器么
      

  2.   

    1. url 'http://localhost/books.XML' 能正确访问到吗?
    2. responseBody返回的结果是二进制? 谁说的?
      

  3.   

    TO youanyyou:应该和这个没关系。TO fengyun817:把responseBody改成responseText是可以输出的,我想应该是访问到了吧;关于二进制,我看网上很多人都这样说,如果返回结果不是二进制,具体这是个怎样的属性呢?TO hibin101:??
      

  4.   

    有个使用responseBody的eg,你看看:
    <html>
    <head><title>Base64 Convert</title></head>
    <body>
    <table style="width:100%;">
        <tr style="height:25px">
            <td>URL:</td>
            <td style="width:90%;"><input id="text_url" style="width:60%;" type="text" value="http://pages.anjukestatic.com/img/comm/commstar.gif" onkeydown="if(event.keyCode==13)btnConvert.click()" onfocus="this.select();"/><input type="button" value="Generate Base64" id="btnConvert" onclick="buttonBase64_Click()"/></td>
        </tr>
        <tr style="height:300px;">
            <td>BASE64:</td>
            <td><input type="button" value="Copy Base64 Data As SRC" onclick="copy()"/><span id="copyInfo" style="color:#F00;margin-left:20px;"></span><br/><textarea id="textarea_base64" style="width:100%; height:100%" /></textarea></td>
        </tr>
        <tr style="height:80px;">
            <td>ResponseHeaders:</td>
            <td><textarea id="textarea_responseHeaders" style="width:100%; height:100%" /></textarea></td>
        </tr>
        <tr>
            <td>Preview:</td>
            <td id="img"></td>
        </tr>
    </table>
    </body>
    <script>
    //http://topic.csdn.net/u/20100127/14/a961df9a-34a1-44f1-9f9a-c10a4d168736.html
    var src="",header="";
    function buttonBase64_Click() {
        var x = new ActiveXObject("MSXML2.XMLHTTP");
        x.open("GET", text_url.value, false);
        x.send(null);
        if (x.status == 200) {
            headers=x.getAllResponseHeaders();
            textarea_responseHeaders.value = headers;
            with (new ActiveXObject("MSXML2.DOMDocument").createElement("node")) {
                dataType = "bin.base64";
                nodeTypedValue = x.responseBody;
                
                textarea_base64.value = text;
                src="data:"+headers.match(/Content-Type:\s*([^\s]+)/)[1]+";base64,"+ text;
                //src="data:image/jpeg;base64,"+ text;
                img.innerHTML="<img src='"+src+"'/>";
            }
        } else {
            textarea_base64.value = textarea_responseHeaders.value = '';
        }
    }
    function copy(){
        window.clipboardData.setData("Text",src);
        copyInfo.innerHTML="Data copyed!";
        setTimeout(function(){
            copyInfo.innerHTML="";
        },3000);
    }
    </script>
    </html>
      

  5.   

    TO sohighthesky:这个是不是漏了一句“nodeTypedValue = x.responseBody;textarea_base64.value = text;”这个,text是哪里来的……
      

  6.   

    TO sohighthesky:哦,知道了,去查了下with语句,这个text应该就是node.text吧,程序是看懂了,大概明白了responseBody的用法,但是感觉概念还是很模糊……
      

  7.   

    我不记得有responseBody这个属性,你用 XMLHttp.responseText 或者 XMLHttp.responseXML 代替 XMLHttp.responseBody 试试。
    responseText  是文本字符串
    responseXML 是 XML Document 对象
      

  8.   

    估计你说的 二进制 是指 responseXML 得到的(XML Document)对象吧
      

  9.   

    参考sohighthesky的代码,我把书上的代码修改成:var XMLHttp=new ActiveXObject('Microsoft.XMLHTTP');
    XMLHttp.open('GET','http://localhost/book.XML',false);
    XMLHttp.send();
    var XMLDoc=new ActiveXObject('Microsoft.XMLDOM');
    var x=XMLDoc.createElement('node');
    x.dataType='bin.base64';
    x.nodeTypedValue=XMLHttp.responseBody;
    alert(x.text);以下这样就能输出了,输出的应该是base64编码吧然后,我把bin.base64改成bin.hex,输出了十六进制,而直接输出responseBody就会出现类型不匹配的问题。
    我现在大概是明白了responseBody的用法