【问题标题】:appending array of arrays to FormData and send via AJAX将数组数组附加到 FormData 并通过 AJAX 发送
【发布时间】:2021-01-03 22:57:55
【问题描述】:

我需要以多部分形式发送一个数组。

let currentObj = this;
let formData = new FormData();
for (var i = 0; i < this.mediaData.length; i++) {
  let file = this.mediaData[i];
  console.log(file, "file");
  formData.append('medias[' + i + ']', , file.file, file.original_file_name, file.function_name);
}
for (var i = 0; i < this.mud_table.name.length; i++) {
  let mud = this.mud_table.name[i];
  formData.append('mud_table[' + i + ']', mud);
}
formData.append('mud_map_status', this.mud.status);
formData.append('mud_map_id', this.mud.id)
formData.append('surveyReportID', this.survey_reporting_id);

使用此代码,我只能将 files 文件属性从 mediasData 数组发送到控制器。

mediasData:[function_name:mud_pdf1; original_file_name: recipt_pdf.pdf; file:{File},
function_name:mud_pdf2; original_file_name: recipt_pdf.pdf; file:{File},
function_name:mud_pdf3; original_file_name: recipt_pdf.pdf; file:{File}]

是这种格式,在后端我只在请求中得到medias:[file:{File}] 格式。 我还需要发送“original_file_name”和“function_name”属性。当然我可以将数组分成 3 部分并单独附加它们,但是有没有办法将每个 mediasData 数组索引的所有属性发送到 formdata 数组各自的索引中?

【问题讨论】:

  • 我在这里没有看到任何嵌套数组。此外,您的 mediasNames 位看起来很奇怪。您能否解释一下您要发送哪些数据?
  • mideasName 是我将 function_name 数组实际发布到控制器的作弊方式。但我也需要将它附加到 mideas 变量中

标签: javascript laravel form-data


【解决方案1】:

FormData 允许您在 appending files 时指定 文件名,以便处理您的 original_file_name 属性。

formData.append(`medias[${i}]`, file.file, file.original_file_name)

这可以通过 PHP 在$_FILES['medias']['name'][$index] 或任何相关的 Laravel 抽象中读取。我确定它支持文件名。

至于您的其他字段,您唯一真正的选择是添加一个具有相应索引的新数组。您似乎一直在尝试使用 mediasNames 执行此操作,但它应该看起来更像

formData.append(`mediaFunctionNames[${i}]`, file.function_name)

总结

let formData = new FormData();
this.mediaData.forEach((file, i) => {
  formData.append(`medias[${i}]`, file.file, file.original_file_name)
  formData.append(`mediaFunctionNames[${i}]`, file.function_name)
})
this.mud_table.name.forEach((mud, i) => {
  formData.append(`mud_table[${i}]`, mud)
})

【讨论】:

  • 感谢您分享此信息 @phil 。似乎我没有选择以某种方式在后端合并这些数组,而是试图一次发送它们。我忘了提到我一直在使用 vue.js。
猜你喜欢
  • 2013-04-12
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
相关资源
最近更新 更多