HTML5 File API: объект FileReader не определен после возникновения ошибки - PullRequest
0 голосов
/ 20 июня 2011

Я использую Chrome 12 на Mac OS X и включил в документ jQuery 1.6.1.

Я пытаюсь прочитать файл со следующим кодом, при чтении файла возникает ошибка, так что вызывается this.error.onerror (), но FileReader-Object this.reader больше не существует, и я не могу получить ошибку.Я также не уверен, почему возникает ошибка, это обычный текстовый документ, который я хочу прочитать.

function FileHandler(files, action) {
    console.log('FileHandler called.');

    this.files = files;
    this.reader = new FileReader();
    this.action = action;

    this.handle = function() {
        console.log('FileHandler.handle called.');

        for (var i = 0; i < this.files.length; i++) {
            this.reader.readAsDataURL(files[i]);
        }
    }

    this.upload = function() {
        console.log('FileHandler.upload called.');
        console.log(this.reader);

        data = {
            content: this.reader.result
        }

        console.log(data);
    }

    this.error = function() {
        console.log('An error occurred while reading a file.');
        console.log(this.reader.error);
    }

    this.reader.onload = this.upload;
    this.reader.onerror = this.error;
}

Этот код создает следующий вывод консоли: http://cl.ly/0j1m3j0o3s071Y1K3A25

Ответы [ 2 ]

0 голосов
/ 09 октября 2016

Это должен быть правильный способ сделать это:

reader.onerror = function(event) {
    console.error("File could not be read: " + event.target.error);
};
0 голосов
/ 21 июня 2011

Внутри .onerror, this - это не то же самое, что снаружи, потому что это новая функция (с новой областью действия).

Следите за this, установив его статически следующим образом:

var _this = this; // _this won't change
this.reader.onerror = function() {
    console.log('An error occurred while reading a file.');
    console.log(_this.reader.error);
}
...