将数组附加到 FormData 并通过 AJAX 发送

新手上路,请多包涵

我正在使用 ajax 提交包含数组、文本字段和文件的多部分表单。

我将每个 VAR 附加到主数据中

var attachments = document.getElementById('files');
 var data= new FormData();

 for (i=0; i< attachments.files.length; i++){
 data.append('file', attachments.files[i]);
 console.log(attachments.files[i]);

 data.append ('headline', headline);
 data.append ('article', article);
 data.append ('arr', arr);
 data.append ('tag', tag);

然后我使用 ajax 函数将其发送到 PHP 文件以存储在 sql DB 中。

 $.ajax({
 type: "post",
 url: 'php/submittionform.php',
 cache: false,
 processData: false,
 contentType: false,
 data: data,
 success: function(request) {$('#box').html(request); }
 })

但在 PHP 端,作为数组的 arr 变量显示为字符串。

当我不使用 ajax 作为表单数据发送它而是使用简单的 $.POST 选项时,我确实将它作为 PHP 端的数组获取,但是我也无法发送文件。

任何解决方案?

原文由 shultz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 733
2 个回答

你有几个选择:

将其转换为 JSON 字符串,然后在 PHP 中解析(推荐)

JS

 var json_arr = JSON.stringify(arr);

PHP

 $arr = json_decode($_POST['arr']);


或者使用 @Curios 的方法

通过 FormData 发送数组。


不推荐:使用序列化数据,然后在 PHP 中反序列化

JS

 // Use <#> or any other delimiter you want
 var serial_arr = arr.join("<#>");

PHP

 $arr = explode("<#>", $_POST['arr']);

原文由 Richard de Wit 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您使用的是 django ArrayField ,那么您需要发送数据作为示例

const form = new FormData();
 const value = ["Hello", "World"];
 const key = "arr";

 for (i = 0; i < value.length; i++) {
 form.append(key, value[i]);
 }
 axios.post(url, form).then(res=> console.log(res));

原文由 Nima 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题