当前位置:   article > 正文

formdata怎么传数组_转换formdata参数格式

formdata传数组

在formdata中传递复杂参数时,很头疼,期望是一个样子,结果到了后台又是另一个样子,介绍几个基本的formdata格式

传递一个普通的对象obj:{name:'testname',age:'testage'}

需要写成这个样子

‘obj[name]’:'testname'

‘obj[age]’:'testage'

传递一个数组arr:['name','age','sex']

需要写成这个样子

'arr[]':'name'

'arr[]':'age'

'arr[]':'sex'

此时有这样一个结构,怎么传,一个个写出来,想死的心都有了,而且还会涉及到文件的异步上传(不然不会用formdata),所以找了个方法,总结一下:数组会加上[],对象会写成这样obj[property]

var params = {

name:'testname',

obj:{

innername:'innername',

innerage:23,

inneraddress:[

{

city:'shanghai',

area:'pudong'

},

{

city:'jiangsu',

area:'nanjing'

},

]

}

}

var objectToFormData =function(obj, form, namespace) {

var fd = form || new FormData();

var formKey;

if(obj instanceof Array){

for(var item of obj ){

if(typeof item === 'object' && !(item instanceof File)){

this.objectToFormData(item, fd, namespace+'[]');

}else{

// 若是数组则在关键字后面加上[]

fd.append(namespace+'[]',item)

}

}

}else{

for(var property in obj) {

if(obj.hasOwnProperty(property) && obj[property]) {

if(namespace) {

// 若是对象,则这样

formKey = namespace + '[' + property + ']';

} else {

formKey = property;

}

// if the property is an object, but not a File,

// use recursivity.

if(typeof obj[property] === 'object' && !(obj[property] instanceof File)) {

// 此处将formKey递归下去很重要,因为数据结构会出现嵌套的情况

this.objectToFormData(obj[property], fd, formKey);

} else {

// if it's a string or a File object

fd.append(formKey, obj[property]);

}

}

}

}

return fd;

};

测试一些,解析出来的数据结构传到后台和我们预期的结果一样:

[keys:]

name

obj[innername]

obj[innerage]

obj[inneraddress][][city]

obj[inneraddress][][area]

obj[inneraddress][][city]

obj[inneraddress][][area]

[values]:

testname

innername

23

shanghai

pudong

jiangsu

nanjing

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号