複数の画像をアップロードしようとしています。だから、私は一時的なURLを生成し、AJAXでそれらを送ることができることを読んだ。Javascriptファイルリーダーが配列に格納されない
アイデアはfilereaderで作成したURLを配列にプッシュし、ajaxで送信しますが、URLは正しくプッシュされません。私は空の配列のように得た結果を参照する場合:
をしかし、私は、私が見ることができるの矢印をクリックすると、URLの内部
しかし、それらにアクセスできないようです。
これは私のコードです:
$('form').on('submit',function(e) {
e.preventDefault();
var filesToUpload = document.getElementById("myFile");
var files = filesToUpload.files;
var fd = new FormData();
var arr = [];
if (FileReader && files && files.length) {
for (i=0; i< files.length; i++){
(function(file) {
var name = file.name;
var fr = new FileReader();
fr.onload = function() {
arr.push(fr.result);
}
fr.readAsDataURL(file);
})(files[i]);
}
console.log(arr);
}
});
最終的アイデアは、文字列JSON.stringify(arr)
に変換して、PHP json_decode($_POST['arr'])
で解析しています。
JSON.stringify(arr)
が空になるため、もちろんこれは機能しません。
を使用すると、非同期コードがどのように機能するかを学ぶ必要がある、私はJaromandaのヒントとして –
を推測します既に、あなたはここでタイミングの問題があります:あなたは 'console.log()'を 'fr.onload()'関数に置いたときに何が起こっているのかを見ることができます。アレイは徐々に構築されています。あなたの現在の 'console.log'は現在、あまりにも早く起動されています。非同期リクエストを 'when()'/'then()'コンストラクトにバンドルしようとすることもできます( "約束"の下にあります)。 – cars10m
サーバーに送信する場合、これらのイメージをテキストとして送信する理由は何ですか?あなたは単にマルチポート(あなたのブロブから直接)として送信することができます。**本当に** b64バージョンが必要な場合は、変換サーバー側で行います。 – Kaiido