使用ajax发送多个文件而不使用html表单

时间:2017-07-28 12:26:39

标签: php jquery 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

1 个答案:

答案 0 :(得分:4)

不是使用文件构建数组(由于源已经是数组,这有点奇怪),而是将文件直接附加到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中循环的数组。