2017-01-14 6 views
0

Ich versuche Blob zu verwenden, um Bild in der Website anzuzeigen, aber wie ich URL außerhalb Onload erhalten kann, um es in Funktion zurückzugeben?Blob Bild 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

Sie müssen wissen, [Wie eine Antwort von einem asynchronen Aufruf zurückkehren] (https://stackoverflow.com/questions/14220321/how-do -i-Return-die-Antwort-von-einem asynchronen Anruf) –

+0

+ Sie brauchen keinen Array-Puffer, wenn was Sie wollen, ist ein Blob, XHR auch als ein "blob" responseType. – Kaiido

Antwort

0

, wenn Sie verwenden imageUrl=urlCreator.createObjectURL(blob); stattdessen var imageUrl=urlCreator.createObjectURL(blob); Sie Ihre Variable in der globalen Rahmen gesetzt werden und in der Lage sein, außerhalb der Funktion zuzugreifen.

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


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

dann wird es die unvermeidliche Frage "Wie gebe ich einen Wert aus einer asynchronen Funktion zurück" p: –

+0

Gib mir das glänzende Gold Ich muss eine Prämie auf meine Frage setzen. Wer möchte mit Ratschet WebSocket die Verbindung nur auf Windows 10 verlieren. =) – defo

-1

i erstellen möchten Probe dieses

 

    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

Lesen Sie den ersten Kommentar zu Ihrer Frage bezüglich der Rückgabe eines Wertes aus einer asynchronen Funktion –