0

オーディオ ファイルを読み取るために FileReader API を実装しようとしていますが、スクリプトは見た目からその時点に到達しません。私の機能は以下で、問題はreader.onload = handleReaderLoad;行にあります。

function setupFS(file) {
    console.log('setupFS function entered.');
    var reader = new FileReader();
    console.log(reader);
    reader.onload = handleReaderLoad;
}

function handleReaderLoad(evt) {
    console.log(reader);
    var audioSrc = $('.file-playlist table tr:nth-child(n+1) td:first-child');
    console.log(audioSrc);
    console.log(reader.readAsDataURL(file));
    audioSrc.attr('data-src', reader.readAsDataURL(file));
}

コンソールでは、リーダーは onload イベントでfunction handleReaderLoad(evt) {呼び出しが発生したと表示されますが、readeraudioSrc、およびreader.readAsDataURL(file)変数がコンソールに記録されることはありません。私は何が欠けていますか?

4

1 に答える 1

1

FileReader API がイベントを設定する方法を理解しました。FileReader を使用する主なプロセスは、FileReader を作成し、次に示す onload または onloadend イベントなどのそのイベントの一部またはすべてを宣言することによって機能します。このプロセスは、1 つの主要な機能に凝縮することもできます。

function readFile(file) {
    var audioSrc;
    audioSrc = $('.file-playlist table tr:nth-child(' + n + ') td:first-child');
    var progress = $('.file-playlist table tr:nth-child(' + n + ') td:last-child progress');
    n++;
    progress.removeAttr('value');
    progress.attr('data-mod', 'true');
    var reader = new FileReader();
    reader.onload = (function(file) {
        return function(e) {
            audioSrc.attr('data-src', e.target.result);
            $('.file-playlist audio source').attr('data-src', e.target.result);
            progress.attr('value', '100');
            console.log('onload stage finished');
        };
    })(file);
    reader.onloadend = (function() {
        audioSrc.text(file.name);
    });
    reader.readAsDataURL(file);
}

readAsDataURL()この関数は、FileReader を作成し、関数を返すことによって onload イベントを宣言することによって機能します。この場合はメソッドを使用して、関数の最後でデータを読み取ることによってリーダーにコンテンツが与えられます。

于 2013-07-02T05:54:32.747 に答える