提问者:小点点

将数组添加到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端将它作为一个数组来获取,但这样我就不能同时发送文件。

有什么解决办法吗?


共2个答案

匿名用户

您有几个选项:

JS

var json_arr = JSON.stringify(arr);

PHP

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

通过formdata发送数组。

JS

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

PHP

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

匿名用户

您还可以通过formdata发送数组,方法如下:

var formData = new FormData;
var arr = ['this', 'is', 'an', 'array'];
for (var i = 0; i < arr.length; i++) {
    formData.append('arr[]', arr[i]);
}

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

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