2017-01-14 8 views
0

ブロブを使用してウェブサイトに画像を表示しようとしましたが、関数内で返すためにURLを外部に取得する方法はありますか?ブロブ画像URL(JavaScript)

var xhr = new XMLHttpRequest(); 
xhr.open("GET", "//fiddle.jshell.net/img/logo.png", true); 
xhr.responseType = "arraybuffer"; 

xhr.onload = function(e) { 
    var arrayBufferView = new Uint8Array(this.response); 
    var blob = new Blob([arrayBufferView]); 
    var urlCreator = window.URL || window.webkitURL; 
    var imageUrl = urlCreator.createObjectURL(blob); 
    //window.URL.revokeObjectURL(imageUrl); 
}; 

xhr.send(); 

+3

のサンプルを作成したい[非同期呼び出しからの応答を返す方法](https://stackoverflow.com/questions/14220321/how-do -i-return-from-as-asynchronous-call) –

+0

+あなたが望むものがブロブであれば、配列バッファを要求する必要はありません、XHRは ''blob ''のresponseTypeでもあります。 – Kaiido

答えて

0

あなたの代わりにvar imageUrl=urlCreator.createObjectURL(blob);imageUrl=urlCreator.createObjectURL(blob);を使用する場合は、グローバルスコープであなたの変数を入れて、関数の外でアクセスできるようになります。

function yo(lo) { 
window.onload=function(e){ 
lo("give me shiny gold"); 
}} 


yo(function(work) { 
alert(work); 
}); 
+0

それから必然的に "非同期関数からどのように値を返すのですか"という質問があります:p –

+0

私にその光沢のある金を与えてください私は私の質問に恩恵を払う必要があります。誰もラチェットwebsocketそのWindows 10での損失接続を気にしたい=) – defo

-1

は、私はあなたが知っている必要があり、この

 

    function blob_im(url){ 
    var xhr = new XMLHttpRequest(); 
      xhr.open("GET", url, true); 
      xhr.responseType = "arraybuffer"; 
      xhr.onload = function(e) { 
      var arrayBufferView = new Uint8Array(this.response); 
      var blob = new Blob([arrayBufferView]); 
      var urlCreator = window.URL || window.webkitURL; 
      var imageUrl = urlCreator.createObjectURL(blob); 
      //window.URL.revokeObjectURL(imageUrl); 
      }; 
    xhr.send(); 
    return imageUrl; 
    } 

    var image_link = blob_im("http://...."); 

+0

非同期関数から値を返すに関するあなたの質問の最初のコメントを読んで –