我可以在javascript中将数组附加到’formdata’吗?

我正在使用FormData上传文件。 我还想发送一系列其他数据。

当我发送图像时,它工作正常。 当我将一些文本附加到formdata时,它工作正常。 当我尝试在下面附加’tags’数组时,其他一切正常但没有发送数组。

FormData和附加数组的任何已知问题?

实例化formData:

formdata = new FormData();

我创建的数组。 Console.log显示一切正常。

  // Get the tags tags = new Array(); $('.tag-form').each(function(i){ article = $(this).find('input[name="article"]').val(); gender = $(this).find('input[name="gender"]').val(); brand = $(this).find('input[name="brand"]').val(); this_tag = new Array(); this_tag.article = article; this_tag.gender = gender; this_tag.brand = brand; tags.push(this_tag); console.log('This is tags array: '); console.log(tags); }); formdata.append('tags', tags); console.log('This is formdata: '); console.log(formdata); 

我是怎么发的:

  // Send to server $.ajax({ url: "../../build/ajaxes/upload-photo.php", type: "POST", data: formdata, processData: false, contentType: false, success: function (response) { console.log(response); $.fancybox.close(); } }); 

这个怎么样?

 formdata.append('tags', JSON.stringify(tags)); 

…相应地,使用服务器上的json_decode来解析它。 看,FormData.append的第二个值可以是……

Blob,File或字符串,如果两者都不是,则将值转换为字符串

我看到它的方式,你的tags数组包含对象(@Musa是正确的,顺便说一句;使this_tag成为一个数组,然后为它分配字符串属性没有意义;改为使用普通对象),因此本机转换(使用toString() )赢了够了。 不过,JSON’ing应该可以获得信息。

作为旁注,我将重写属性赋值块到这里:

 tags.push({article: article, gender: gender, brand: brand}); 

写作

 var formData = new FormData; var array = ['1', '2']; for (var i = 0; i < array.length; i++) { formData.append('array_php_side[]', array[i]); } 

你可以通过php接收正常的数组post / get。

使用"xxx[]"作为formdata中字段的名称(在这种情况下,您将获得一个字符串化对象的数组)

在你的循环中

 $('.tag-form').each(function(i){ article = $(this).find('input[name="article"]').val(); gender = $(this).find('input[name="gender"]').val(); brand = $(this).find('input[name="brand"]').val(); this_tag = new Array(); this_tag.article = article; this_tag.gender = gender; this_tag.brand = brand; //tags.push(this_tag); formdata.append('tags[]', this_tag); ... 

function:

 function appendArray(form_data, values, name){ if(!values && name) form_data.append(name, ''); else{ if(typeof values == 'object'){ for(key in values){ if(typeof values[key] == 'object') appendArray(form_data, values[key], name + '[' + key + ']'); else form_data.append(name + '[' + key + ']', values[key]); } }else form_data.append(name, values); } return form_data; } 

使用:

 var form = document.createElement('form');// or document.getElementById('my_form_id'); var formdata = new FormData(form); appendArray(formdata, { 'sefgusyg': { 'sujyfgsujyfsg': 'srkisgfisfsgsrg' }, test1: 5, test2: 6, test3: 8, test4: 3, test5: [ 'sejyfgjy', 'isdyfgusygf' ] });