Я знаю, что на это, возможно, ответили много раз, но я не знаю слов, чтобы найти ответ. Итак, вот вопрос.Получить переменную функцию внутренней загрузки
Я использую JavaScript и у меня есть
function getDataUrl(file){
var url = URL.createObjectURL(file),
canvas = document.createElement('canvas'),
ctx = canvas.getContext("2d"),
img = new Image,
dataURL = '';
img.load = function(){
canvas.height = this.height;
canvas.width = this.width;
ctx.drawImage(this, 0, 0);
dataURL = canvas.toDataURL("image/jpeg");
};
img.src = url;
return dataURL;
}
затем на входе у меня есть это,
$('#file-input').on('change', function(e){
var dataUrl = getDataUrl(e.target.files[0]);
console.log(dataUrl);
});
Но возвращать пустую строку (начальный один). Я хочу, чтобы данные base64 уже сгенерировали внутреннюю загрузку.
Я попробовать что-то вроде этого
function getDataUrl(file){
//... codes
img.load = function(){
//... codes
dataURL = canvas.toDataURL("image/jpeg");
return dataUrl;
};
}
но, конечно, она не может, так как он вернется к функции загрузки, а не его родителей функция.
Как получить dataUrl
значение внутри функции загрузки?
Благодаря
сделать вашу 'dataUrl' глобальной переменной, тогда ее значение будет разделяться между функциями. – muneebShabbir
@muneebShabbir Извините, но это не так, по крайней мере, двумя способами: глобальные вары плохи по причинам, которые должны быть очевидны, и переменная не должна быть задана при ее доступе (она может быть *, но нет гарантии). – Carpetsmoker
@Carpetsmoker да, вы правы, я неправильно понял поток кода, в этом случае обратный вызов будет единственным прекрасным решением – muneebShabbir