Ajax调用使用FormData发送数组被自动转为字符串如何解决?
问题根因
FormData.append() 方法接收非Blob/非字符串类型的值时,会自动调用该值的toString()方法做类型转换,你直接传入数组的话,会被转换为逗号拼接的字符串,所以后端收到的就是字符串格式。
可行解决方案
方案1:逐个追加数组元素(适配绝大多数后端框架的数组解析规则,无需调整后端逻辑)
大部分服务端框架(包括Spring MVC、Express、PHP等)解析multipart/form-data请求时,会自动将键名带[]后缀的同名字段组装为数组。你只需要把原来的单条append逻辑替换为遍历数组逐个追加即可。
替换你代码里的formData.append('fields',fields);为以下代码:
fields.forEach(fieldItem => { formData.append('fields[]', fieldItem); });
你原有$.ajax的配置已经正确设置了contentType: false和processData: false,不需要修改其他部分。
方案2:序列化数组为JSON格式(适用于后端可直接解析JSON字符串参数的场景)
如果你的后端接口预期接收JSON格式的数组参数,可以将数组序列化后传递:
formData.append('fields', JSON.stringify(fields));
该方案需要后端对接收到的字符串做JSON反序列化处理,如果你确定后端无法调整逻辑优先使用方案1即可。
内容的提问来源于stack exchange,提问作者xanabobana
相关产品推荐
相关产品推荐

