首页 > 解决方案 > 为什么使用 JS AJAX 将多个同名值附加到 formData 仅将最后一个值发送到 PHP

问题描述

我正在尝试使用 AJAX 将多个文件发送到我的 PHP,方法是将每个文件附加到具有相同名称的 formData。当将它记录到 JS 控制台时,formData 条目很好地完成了多个条目,但是当我将它发送到 PHP 时,我只得到最后一个。如果不是文件只是字符串或其他什么,则相同。

我知道我可以将数据附加到 formData 以形成一个设置名称的数组,.append('name[]', whateverValue);但是然后在服务器中,文件何时是文件,而不是带有键的文件数组:值是多个数组,每个键对应一个。

这是我的 JS 代码:

let formData = new FormData()

formData.append('file', files[0])
formData.append('file', files[1])

console.log(formData.getAll('file'))

$.ajax({

    type: 'POST',
    url: '../php/_DEBUG.php',
    processData: false,
    contentType: false,
    cache: false,
    data: formData

}).done(response => console.log(La.parse.maybeJSON(response)))

在我的 PHP 代码中,当我测试它而不是文件时,我只是回显 json 编码的 $_FILE 数组或 $_POST。因此,在这种情况下,响应只是添加的最后一个文件(file[1]),如果我回显 $_FILE['file'] 的 COUNT 为 1。

这就是它所显示的console.log(formData.getAll('file'))JS console.log 的结果 formData 在发送之前

这是 PHP 代码时服务器的响应echo json_encode($_FILE);PHP 响应的结果仅显示最后一个文件已发送

如果我将文件附加到名称上带有“[]”的formData,这就是响应: 使用附加上的数组构造函数添加多个文件时的PHP响应结果

所以我希望能够在不使用“[]”的情况下发送文件或其他任何内容,只需附加相同的名称并将其作为 PHP 中的数组获取,因为 formData 在 JS 和官方文档中做得很好建议在没有'[]'的情况下这样做。

谢谢你的帮助!

标签: javascriptphpajax

解决方案


推荐阅读