将数组附加到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
variables显示为一个string。
当我不用ajax作为表单数据发送它,而是使用简单的$.POST
选项时,我将它作为PHP端的一个数组来获取,但是我不能发送这些文件。
任何解决scheme
你可以做2件事情:
1.将其转换为JSONstring,然后用PHPparsing(推荐)
JS
var json_arr = JSON.stringify(arr);
PHP
$arr = json_decode($_POST['arr']);
2.序列化数据,然后反序列化在PHP中
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的情况下,它应该工作。
您可能会发现这篇文章很有用: 如何传递查询string中的数组?
这是一个古老的问题,但我遇到了这个问题,最近发布对象和文件。 我需要能够发布一个对象,也是对象和数组的子属性。
下面的函数将遍历一个对象并创build正确的formData对象。
// formData - instance of FormData object // data - object to post function getFormData(formData, data, previousKey) { if (data instanceof Object) { Object.keys(data).forEach(key => { const value = data[key]; if (value instanceof Object && !Array.isArray(value)) { return this.getFormData(formData, value, key); } if (previousKey) { key = `${previousKey}[${key}]`; } if (Array.isArray(value)) { value.forEach(val => { formData.append(`${key}[]`, val); }); } else { formData.append(key, value); } }); } }
这将转换下面的json –
{ name: 'starwars', year: 1977, characters: { good: ['luke', 'leia'], bad: ['vader'], }, }
进入下面的FormData
name, starwars year, 1977 characters[good][], luke characters[good][], leia characters[bad][], vader