【问题标题】:Displaying binary code of a file in ajax在ajax中显示文件的二进制代码
【发布时间】:2012-09-30 18:53:04
【问题描述】:

我想显示音乐文件的二进制代码。但不知何故,下面的代码似乎不起作用。有什么建议吗??

function binary() {
    var xmlhttp;
    if (window.XMLHttpRequest) {  // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
    else {  // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("GET","1.wav",true);
    xmlhttp.overrideMimeType("text/plain; charset=x-user-defined");
    xmlhttp.onreadystatechange = function(buffer) {
        var binaryCode = "";
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            var binStr = this.responseText;
            for (var i=0; i<binStr.length; i++) {
                var byte = binStr.charCodeAt(i) & 0xff;  // get byte at i
                binaryCode += byte;
            }   
        }
        document.getElementById("result").innerHTML = binaryCode; // should display binary code
    };
    xmlhttp.send();
}

【问题讨论】:

    标签: javascript ajax file binary


    【解决方案1】:

    并非所有字节值都可以在字符串中表达,并且不会出现或导致字符串被截短。

    XMLHttpResponse.ResponseText/ResponseXML 会将 http 响应内容作为字符串返回。例如,任何 0 字节值都将终止字符串。

    让服务器返回字节的 Base64 表示并在客户端解码为字节值。

    【讨论】:

      【解决方案2】:

      您的代码似乎在我的 chrome 浏览器上运行良好。 您正在尝试的具体问题是什么?

      您可能希望通过执行以下操作以十六进制形式显示二进制文件:

      binaryCode += '0x' + byte.toString(16) + ' '
      

      编辑: 这个 jsfiddle 在我的 chrome 上工作: http://jsfiddle.net/e6Kfk/

      但是,我不认为这种方法是跨浏览器的,特别是如果你想处理 ie(虽然还没有测试过)

      【讨论】:

      • 在我的 chrome 浏览器上它似乎不起作用。什么都没有显示。不知道是不是音乐文件的问题。
      • 从我的角度来看很难说,但首先要检查的是它是否真的进入了 if (..status == 200) 以及数据长度是否正确.. 使用chrome 调试器和 console.log 为您提供帮助
      猜你喜欢
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 2014-02-20
      • 2014-11-27
      • 1970-01-01
      • 2012-08-21
      • 2012-02-15
      相关资源
      最近更新 更多