【问题标题】:Sending multiple files using ajax without using html form使用ajax发送多个文件而不使用html表单
【发布时间】:2017-07-28 12:26:38
【问题描述】:

我使用具有多个上传属性的单个文件输入字段。我已经测试过这样的单个文件传递并且它有效。现在我正在尝试 使用数组传递文件但有错误。 没有表格。

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));

错误日志:

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

【问题讨论】:

标签: php jquery ajax


【解决方案1】:

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

【讨论】:

  • 这个数组在 $_FILES 中的结构是怎样的?
  • 执行print_r($_FILES['userfile]); 并检查。不要把代码放在我面前。
  • @PhilipLisitsyn 它解决了您的问题吗?如果是,请随时接受,如果不是,请告诉我发生了什么。
猜你喜欢
  • 1970-01-01
  • 2018-05-08
  • 2013-03-31
  • 1970-01-01
  • 2012-07-02
  • 2016-08-14
  • 2018-10-13
  • 2012-06-19
  • 2016-04-11
相关资源
最近更新 更多