2017-01-14 4 views
0

Я пытаюсь использовать blob для показа изображения на веб-сайте, но как я могу получить URL-адрес вне onload, чтобы вернуть его в функции?blob image 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-the-response-from-a-асинхронный вызов) –

+0

+ вам не нужно требовать массив-буферов, если вы хотите использовать blob, XHR также как тип ответа «blob». – Kaiido

ответ

0

если вы используете imageUrl=urlCreator.createObjectURL(blob); вместо var imageUrl=urlCreator.createObjectURL(blob); вы будете поместить переменную в глобальном масштабе и быть в состоянии получить доступ вне функции.

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


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

, тогда возникает вопрос «как вернуть значение из асинхронной функции»: p –

+0

Дайте мне это блестящее золото. Мне нужно поставить щедрость на мой вопрос. Любой, кто хочет потрудиться с веб-сайтом Ratchet, который потеряет соединение только в 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

Прочитайте первый комментарий к своему вопросу относительно возврата значения из асинхронной функции –