4

何らかの理由で、次のコードでは、evt.target.resultは空です。何故ですか?

function drop(evt) {
    evt.stopPropagation();
    evt.preventDefault();

    var file = evt.dataTransfer.files[0];

    handleFiles(file, evt.target);
}

function handleFiles(file, target) {
    loadSongAnimate();

    var reader = new FileReader();

    // init the reader event handlers
    reader.onloadend = handleReaderLoadEnd;

    // begin the read operation
    reader.readAsDataURL(file);
}

function handleReaderLoadEnd(evt) {
    alert('Passing this: ' + evt.target.result);
    document.getElementById('audioTagId').src = evt.target.result;
}
4

2 に答える 2

8

細かいマニュアルから:

onloadend
成功したかどうかにかかわらず、読み取りが完了すると呼び出されます。これは、onloadまたはの後に呼び出されますonerror

エラー状態になっていると思われます。onerrorコールバックを追加して、何reader.errorを言わなければならないか見てみましょう。onerrorの代わりに、 、onabort、およびonloadコールバックを個別に使用することをお勧めしますonloadend

onabort
読み取り操作が中止されたときに呼び出されます。

onerror
エラーが発生したときに呼び出されます。

onload
読み取り操作が正常に完了したときに呼び出されます。

これにより、個々のイベントの処理が容易になる場合があります。


あなたのコメントでは、他の細かいマニュアルから「エラー2」が発生していると言っています:

定数:SECURITY_ERR
: 2
説明: セキュリティ上の理由により、ファイルにアクセスできませんでした。

そのため、「許可が拒否されました」というエラーが発生したようです。

于 2011-06-04T19:42:20.923 に答える
2

ローカルの file:// プロトコルでファイルを編集および表示していました。別のローカル ファイル内のローカル ファイルを参照している場合、参照されたローカル ファイルの空のヘッダーがセキュリティ エラーをスローします。

教訓...テストのためにも常にサーバーにアップロードしてください。グーグルで何時間も節約でき、髪の毛もたくさん節約できたでしょう。

于 2011-07-11T21:42:39.160 に答える