通过FormData追加对象数组未达预期效果,寻求解决方法
解决FormData追加对象数组的属性拆分问题
你直接把对象append到FormData里肯定不行——FormData只接受字符串、Blob或File类型的值,直接传对象会被自动转成[object Object],这就是结果不符合预期的原因。用JSON.stringify()会把整个对象变成单个字符串,也达不到你要的属性拆分效果。
要实现按对象属性拆分的结构,得遍历数组里的每个元素,再遍历每个对象的属性,用带索引的命名键来追加数据,比如children[0][title]、children[0][type]这种格式,绝大多数后端框架(比如PHP、Express等)都能自动把这种格式解析成对应的对象数组。
正确代码实现
const children = [{title:"MacBook",type:"LapTop"},{title:"MSI",type:"LapTop"}]; const formData = new FormData(); children.forEach((item, index) => { // 遍历当前对象的所有属性 Object.entries(item).forEach(([key, value]) => { // 用带索引的键名追加属性值 formData.append(`children[${index}][${key}]`, value); }); }); // 可选:打印验证FormData内容 for (let [key, value] of formData.entries()) { console.log(key, value); }
最终生成的键值对示例
运行代码后,FormData里的内容会是:
children[0][title]: "MacBook"children[0][type]: "LapTop"children[1][title]: "MSI"children[1][type]: "LapTop"
这种格式能被后端正确解析为对象数组,完全符合你预期的属性拆分结构。如果后端支持简化格式,也可以用children[title]重复追加,但带索引的方式兼容性更强,能明确对应数组的每一个元素。
内容的提问来源于stack exchange,提问作者Zenixo
相关产品推荐
相关产品推荐

