将数组附加到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方面,作为数组的arrvariables显示为一个string。

当我不用ajax作为表单数据发送它,而是使用简单的$.POST选项时,我将它作为PHP端的一个数组来获取,但是我不能发送这些文件。

任何解决scheme

3 Solutions collect form web for “将数组附加到FormData并通过AJAX发送”

你可以做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 
  • jQuery的 - 如何在事件被解雇后暂时禁用onclick事件监听器?
  • json未捕获的SyntaxError:意外的标记:
  • 如何使用FormData进行ajaxfile upload
  • 更新网站的CSS,而无需刷新页面
  • $ .post和$ .ajax之间的区别?
  • 记住ajax添加数据时按下返回button
  • 播放2.x:如何使用通用button进行AJAX请求
  • 实时协作编辑 - 它是如何工作的?