You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:27:02