2017-03-27 9 views
0

複数の画像をアップロードしようとしています。だから、私は一時的なURLを生成し、AJAXでそれらを送ることができることを読んだ。Javascriptファイルリーダーが配列に格納されない

アイデアはfilereaderで作成したURLを配列にプッシュし、ajaxで送信しますが、URLは正しくプッシュされません。私は空の配列のように得た結果を参照する場合:

enter image description here

をしかし、私は、私が見ることができるの矢印をクリックすると、URLの内部

enter image description here

しかし、それらにアクセスできないようです。

これは私のコードです:

$('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)が空になるため、もちろんこれは機能しません。

+1

を使用すると、非同期コードがどのように機能するかを学ぶ必要がある、私はJaromandaのヒントとして –

+0

を推測します既に、あなたはここでタイミングの問題があります:あなたは 'console.log()'を 'fr.onload()'関数に置いたときに何が起こっているのかを見ることができます。アレイは徐々に構築されています。あなたの現在の 'console.log'は現在、あまりにも早く起動されています。非同期リクエストを 'when()'/'then()'コンストラクトにバンドルしようとすることもできます( "約束"の下にあります)。 – cars10m

+0

サーバーに送信する場合、これらのイメージをテキストとして送信する理由は何ですか?あなたは単にマルチポート(あなたのブロブから直接)として送信することができます。**本当に** b64バージョンが必要な場合は、変換サーバー側で行います。 – Kaiido

答えて

1

次の簡単な解決策が役立つかもしれませんか?検索結果の配列は、すべての値で埋められた後、私は、fr.onload()方法にあなたのconsole.log()とあなたのAJAX呼び出しを置くだけで、それを発射:

$('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 (var i=0; i< files.length; i++){ 
       (function(file) { 
        var name = file.name; 
        var fr = new FileReader(); 
        fr.onload = function() { 
          arr.push(fr.result); 

          if(arr.length==files.length) { 
           console.log(arr); 
           // place your ajax call here! 
          } 
         } 
         fr.readAsDataURL(file); 
       })(files[i]); 
      } 
     } 
}); 
+0

ちょっと仲間、これは完璧に、時間をかけていただきありがとうございます。 –

関連する問題