将数组附加到 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 许可协议

阅读 1k
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 许可协议

您还可以通过 FormData 发送一个数组——这样:

 var formData = new FormData;
var arr = ['this', 'is', 'an', 'array'];

for (var i = 0; i < arr.length; i++) {
  formData.append('arr[]', arr[i]);
}

console.log(...formData);

所以你可以写 arr[] 就像你用一个简单的 HTML 表单一样。如果是 PHP,它应该可以工作。

您可能会发现这篇文章很有用: How to pass an array within a query string?

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

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