javascript - 为什么使用 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 和官方文档中做得很好建议在没有'[]'的情况下这样做。
谢谢你的帮助!
解决方案
推荐阅读
- java - 使用房间数据库的应用程序在构建时出现“未使用的参数错误”
- php - 是否可以通过 HTTP/2 设置 Guzzle + Pool?
- testing - 可以在不重建图表的情况下测试测试/更新的舵图 NOTES.txt 文件吗?
- reactjs - 可以在 React 中重新定义 useState 中的 updater 函数吗?
- excel - 如何在 VBA 函数的 VBA 函数结果上强制使用 NumberFormat?
- python - 升级到 python 3 / gdal 2.3.3 后不再支持 BigTiff
- c# - C# Excel 互操作,Range 类的 CopyPicture 方法失败
- azure-devops - azure devops - 如何使用环境变量在任务中创建新变量?
- python - 如何让 json.loads() 读取以列名作为第一个元素的 json 字符串
- c# - SkiaSharp Xamarin:InvalidateSurface() 适用于 android 但不适用于 ios 设备