2017-07-28 6 views
-1

複数のアップロードプロパティを持つ単一ファイル入力フィールドを使用しています。私はすでにそのような単一のファイルのパスをテストし、それは働いた。今私は に配列を使用してファイルを渡そうとしていますが、間違いがあります。 フォームはありません。htmlフォームを使用せずにajaxを使用して複数のファイルを送信する

HTML:

<input id="fileInfo" name="userfile[]" type="file" multiple> 

JS:

var formData = new FormData(); 
var files = []; 
for(var i = 0; i < length; i++) { 
    files[i] = $('input', '#fileInfo')[0].files[i]; 
} 
formData.append('userfile', files); 
$.ajax({ 
    url: "example.php", 
    data: formData, 
    type: 'POST', 
    dataType: 'json', 
    processData: false, 
    contentType: false, 
    success: function(res) 
    { 
     console.log("done"); 
    } 
}); 

PHP:

<?php 
$length = sizeof($_FILES['userfile']['name']); 
json_encode(array($length)); 

のerror.log:

PHP Notice: Undefined index: userfile in /path/to/php on line 2, referer: http://localhost/test 
+0

https://stackoverflow.com/questions/19617996/file-upload-without-form –

+0

ここに記載されている完全なコード例はhttps://stackoverflow.com/questions/45326498/ajax-to-php-image-uploadです。/45326793#45326793 –

+0

「length」はどこから来ていますか? –

答えて

3

代わりに(一種の奇妙なソースが既に配列であるため、実行することです)ファイルを持つ配列を構築する、あなたのいるFormDataオブジェクトに直接ファイルを追加します。

var formData = new FormData(); 

// Get all the files so we easily can get the length etc. 
// Not necessary, but it will make the code easier to read. 
var files = $('input', '#fileInfo')[0].files; 

for(var i = 0; i < files.length; i++) { 
    formData.append('userfile[]', files[i]); 
} 

$.ajax({ 
    // your ajax call 
}); 

我々はまた、'userfile[]''userfile'を変更しましたそれはあなたのPHPでループすることができる配列になります。

+0

この配列はどのように$ _FILESで構造化されていますか? –

+0

'print_r($ _ FILES ['userfile]);'を実行して確認してください。私の目の前にコードを置かないでください。 –

+0

@PhilipLisitsynあなたの問題を解決しましたか?はいの場合はそれを受け入れるように気をつけてください。そうでない場合は、何が起こったか教えてください。 –

関連する問題