Ionic5使用ionic-native/http提交FormData报advanced-http仅支持object错误如何解决
Ionic 5 使用 ionic-native/http 提交 FormData 报错解决方案
报错原因
cordova-plugin-advanced-http(ionic-native/http 封装的底层插件)默认的 data 参数仅支持普通 JSON 对象,直接传入 FormData 实例会触发类型不匹配错误。
可行解决方案
方案1:使用插件内置 multipart 序列化器(推荐,兼容普通表单、文件上传场景)
无需手动创建 FormData,插件会自动将普通对象转换为 multipart/form-data 格式的表单:
// 保留原有SSL忽略配置 this.http.setServerTrustMode("nocheck"); // 设置数据序列化格式为multipart this.http.setDataSerializer("multipart"); // 直接构造普通JS对象传入即可 const postData = { mobile: mobile // 若需要上传文件,按以下格式添加字段即可,插件会自动处理为文件表单项 // uploadFile: { // name: "test.jpg", // path: "file:///本地文件路径/test.jpg", // type: "image/jpeg" // } }; this.http.post(url, postData, {}) .then(res => { // 请求成功逻辑 // 若后续请求需要默认JSON序列化,可重置序列化器 this.http.setDataSerializer("json"); }) .catch(err => console.error(err));
方案2:手动构造 FormData 时使用 sendRequest 方法
如果有复杂表单拼接需求,必须手动创建 FormData,可以调用更灵活的 sendRequest 方法:
this.http.setServerTrustMode("nocheck"); const fd = new FormData(); fd.append('mobile', mobile); // 按需添加其他表单项 this.http.sendRequest(url, { method: "post", data: fd, serializer: "multipart" }) .then(res => console.log(res)) .catch(err => console.error(err));
注意事项
- 不要手动设置
Content-Type请求头,插件会自动生成带边界标识(boundary)的正确请求头,手动配置反而会导致请求解析失败。 - 请求完成后若有其他JSON格式的请求,记得调用
this.http.setDataSerializer("json")恢复默认序列化配置,避免影响其他接口调用。
内容的提问来源于stack exchange,提问作者Hadi Joghataei
相关产品推荐
相关产品推荐

