2012-10-10 53 views
0

我想顯示音樂文件的二進制代碼。但不知何故,下面的代碼似乎不工作。有什麼建議麼??在ajax中顯示文件的二進制代碼

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(); 
} 

回答

0

並非所有的字節值都可以在一個字符串中表達出來,並且不會出現或導致字符串中斷。

XMLHttpResponse.ResponseText/ResponseXML將以字符串形式返回http響應內容。例如,任何字節值0都會終止字符串。

讓服務器返回字節的Base64表示並解碼爲客戶端的字節值。

0

您的代碼似乎在我的Chrome瀏覽器上正常工作。 你正在試驗的問題究竟是什麼?

您可能希望通過做這樣的事情,以顯示在十六進制形式的二進制:

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

編輯: 此的jsfiddle工作在我的鉻: http://jsfiddle.net/e6Kfk/

但是,我不認爲這種方法是交叉瀏覽器,尤其是如果你想處理ie(雖然還沒有測試過)

+0

在我的Chrome瀏覽器中,它似乎不起作用。沒有顯示。我不知道問題是否是音樂文件。 –

+0

很難說從我的角度來看,但首先要檢查的是它是否真的進入了if(..status == 200),如果數據長度是正確的..使用chrome調試器和console.log來幫你 – Louis