如何在FormData.append方法中传输ID数组并保持标准数组格式?
问题原因
FormData的append()方法传入非字符串/Blob类型的参数时,会自动调用参数的toString()方法做类型转换。数组的默认toString()返回结果就是逗号拼接的元素字符串,所以你传入[64,65]最终就会变成"64,65"。
解决方法
方案1:提交JSON序列化后的数组(推荐)
如果后端可以兼容解析JSON格式的参数,直接把数组做JSON序列化后再传入append即可,提交的格式就是你需要的[64,65]字符串,后端拿到后做一次JSON反序列化就能得到标准数组。
修改后的代码如下:
const update = () => { let deleteDoc = deleteDoc_temp; let formData = new FormData(); // 把数组转成JSON字符串再append formData.append('deleted_attachment', JSON.stringify(deleteDoc)); for (var pair of formData.entries()) { console.log(pair[0]+ ', ' + pair[1]); } }
方案2:提交Form标准数组格式
如果后端期望接收传统Form表单的数组参数(参数名带[]后缀,多个同名参数分别传值),可以遍历数组逐个添加到FormData中:
const update = () => { let deleteDoc = deleteDoc_temp; let formData = new FormData(); // 遍历数组逐个添加,参数名加[]后缀符合多数后端框架的表单数组解析规则 deleteDoc.forEach(id => { formData.append('deleted_attachment[]', id); }) for (var pair of formData.entries()) { console.log(pair[0]+ ', ' + pair[1]); } }
这种方式后端可以直接解析得到数组类型的deleted_attachment参数,不需要额外做JSON反序列化。
内容的提问来源于stack exchange,提问作者duatree
相关产品推荐
相关产品推荐

