uni.request 是 uni-app 发起 POST 请求的唯一标准方式,需显式设置 'content-type' 头、method 必须大写为 'POST',data 传对象并配合对应 header,且小程序等平台要求 HTTPS 域名并配置合法域名白名单。

uni.request是 uni-app 发起 POST 请求的唯一标准方式,没有封装库或第三方依赖的必要。关键不是“能不能发”,而是“参数、头、数据格式是否匹配后端预期”。下面直说实操要点。
POST 请求必须显式设置 Content-Type 头
不加 header: { 'content-type': 'application/json' },很多后端(如 .NET 6、Spring Boot、Flask 默认配置)会直接返回 400 Bad Request,且控制台几乎不报错——只在 Network 面板看到空响应或 status 400。
常见错误现象:点击按钮无反应、success 不触发、fail 回调里 err.errMsg 是 "request:fail net::ERR_CONNECTION_REFUSED" 或空对象。
- 如果后端接收表单数据(
application/x-www-form-urlencoded),data传普通对象即可,uni.request会自动序列化,无需手动拼接字符串 - 如果后端接收 JSON(
application/json),data仍传 JS 对象,但必须加header显式声明类型 - 大小写敏感:
'Content-Type'和'content-type'在部分平台(如微信小程序)表现不一致,建议统一用小写'content-type'
data 传对象还是字符串?看后端接口文档
uni-app 的 uni.request 对 data 参数有隐式处理逻辑:
- 当
data是对象且未指定content-type→ 自动按application/x-www-form-urlencoded发送 - 当
data是字符串(如JSON.stringify({}))→ 不自动加头,必须手动设content-type,否则后端收不到 body - 多数现代 API 要求 JSON,所以推荐统一写法:
data: { username: 'a', password: 'b' }+header: { 'content-type': 'application/json' }
别把 JSON.stringify() 当成“更安全”的做法——它反而容易漏掉 header,且增加一层手动序列化风险。
跨平台差异:method 值必须大写,且平台支持不一
method: 'post' 在 H5 正常,但在微信小程序、支付宝小程序会静默失败(不进 success 也不进 fail)。
- 务必写成
method: 'POST'(全大写) - 某些平台(如百度小程序)不支持
UPLOAD等非常规 method,但POST全平台兼容 - 如果你在真机调试时发现 H5 能通、小程序没反应,第一反应就该检查 method 大小写
开发期常见卡点:本地后端请求被拦截或超时
用 http://localhost:5017/login 这类地址,在小程序环境必然失败——小程序只允许 HTTPS 域名,且需提前配置 request 合法域名白名单。
- H5 模式下可直连
http://localhost,但 App 和小程序必须走 HTTPS + 白名单 - 真机调试时,
fail回调的err.errMsg若含"request:fail url not in domain list",说明域名未配置 - 开发阶段建议用
https://jsonplaceholder.typicode.com/posts快速验证逻辑,排除环境干扰
真正容易被忽略的是:即使你写了正确的 header 和 data,只要域名没进白名单,整个请求根本不会发出——此时看 Network 面板是空的,不是后端问题,是平台拦截。











