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

2022-08-30 02:02:52

我正在使用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作为表单数据发送它,而是使用简单的选项时,我确实在PHP端将其作为数组,但是我也无法发送文件。$.POST

任何解决方案?


答案 1

您也可以通过以下方式发送数组: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);

因此,您可以像使用简单的HTML表单一样编写。在PHP的情况下,它应该工作。arr[]

您可能会发现本文很有用:如何在查询字符串中传递数组?


答案 2

您有几种选择:

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

断续器

var json_arr = JSON.stringify(arr);

菲律宾比索

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

或者使用@Curios的方法

通过 发送数组。FormData


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

断续器

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

菲律宾比索

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