2014-06-06 122 views
0

我有一個PHP文件,從SQL數據庫中獲取音頻blob。我需要使用JavaScript將該blob發送到html頁面。發送blob變量從PHP到JavaScript

下面是我發送blob變量$ ubr的PHP代碼。

echo json_encode(array('first'=>$ubr)); 

下面是我嘗試接收blob的JavaScript。

var url = "testThis.php" 

var ajax = new XMLHttpRequest(); 
ajax.open("GET", url, true); 
//ajax.send(null); 
ajax.onreadystatechange = function() { 

    if (ajax.readyState == 4 && (ajax.status == 200)) { 
     var Data = JSON.parse(ajax.responseText);    
     var b64Data = Data.first; 
    } 
} 

我認爲這是因爲我把它當作字符串對待,但Blob是二進制數據。除了我不確定還有什麼要做。

我需要保持PHP數據爲一個數組。我將需要同時發送一個blob和一個字符串值。

+0

什麼字符串值是它,你需要發送相處?也許將音頻作爲二進制文件發送,字符串信息出現在HTTP標頭中 – Bergi

回答

1

對於AjaxXMLHttpRequest,服務器響應可以

  1. responseText的 - 當您返回HTML或任何字符串作爲你的迴應。
  2. responseXML - 當您返回XML作爲您的迴應。
  3. 響應 - 當您將響應作爲數組緩衝區,Blob,Document,JavaScript對象(用於「json」)或字符串返回時。如果請求未完成或未成功,則爲空。

如果要返回HTML作爲響應 ex.PHP代碼:

$data['blob']="blob_value"; 

    return "<div id='blob'>".$data['blob']."</div><div id='string'>".$data['string']."</div>"; // returning HTML as response . 

然後你可以使用的responseText

ajax.onreadystatechange = function() { 

      if (ajax.readyState == 4 && (ajax.status == 200)) { 

       document.getElementById("target").innerHTML =(ajax.responseText);    

} 

}

在你的情況下返回數組

PHP c ODE可以是:

$data['blob']="blob_value"; 
    $data['name']="name_value"; 
    // returning json data ==> {"blob": "blob_value","name": "name_value"} 
    return json_encode($data); 

在JavaScript:

ajax.onreadystatechange = function() { 

     if (ajax.readyState == 4 && (ajax.status == 200)) { 
     var data= ajax.response; 
     var arr= JSON.parse(data); 
    alert(arr.blob);       

     } 
    } 
+0

我需要返回一個數組,但不僅僅是一個字符串。你也說過「你可以使用響應文本」,是否應該說responseXml? – SolidCloudinc

+0

@Silz:你忘記了'xhr.response',它基本上可以是任何類型的。即使是二進制。 – Bergi

+0

@Bergi:真的很感謝你的幫助:) – Silz