我正在使用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数据库中。
$.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方面将其作为数组得到,但这样我就无法同时发送文件。
有什么解决办法吗?
formData.append('arr[]', arr[i]);
中需要写arr[]
?为什么不是arr
就可以了呢?我尝试了两种方式,但只有arr[]
能够正常工作。 - Totoroarr
的情况下,你只是在每次循环迭代中重新定义这个值,在最后,最终值将等于最后一个数组元素,而不是整个数组。 - Olegarr[]
有什么不同,为什么arr[]
没有被重新定义?arr[]
也是一个字符串。在我的测试中,无论是arr
还是arr[]
都没有被重新定义。我使用相同的键但不同的值在FormData中得到了多个数组。所以我得到了一个值为1
的arr
和另一个值为2
的arr
。 - Totorofor (var i = 0; i < myArr; i++) { var myItemInArr = myArr[i]; for (var prop in myItemInArr) { fileData.append(`myArr[${i}][${prop}]`, myItemInArr[prop]); } }
- edqwerty