uni.request 发起 GET 请求时 data 必须传 Object 类型,会自动拼为 URL 查询参数;字符串或数组会被丢弃或错误解析;需配置 HTTPS 合法域名;复杂嵌套结构需手动 JSON.stringify。
uni.request 是 uni-app 中发起 get 请求的唯一标准方式,不需要额外引入库(除非你主动二次封装)。它默认就是 get,只要不传 method 或显式写 method: "get",参数会自动拼到 url 后面。
uni.request 发起 GET 请求时 data 怎么传?
GET 请求的参数必须作为查询参数(query string)附在 URL 后,uni.request 会帮你自动处理,但前提是:
-
data必须是 Object 类型(不能是字符串或数组) - 不要手动拼 URL,否则容易出错或被重复编码
例如:
uni.request({
url: 'https://api.example.com/user',
data: { id: 123, type: 'vip' },
success(res) {
console.log(res.data);
}
});实际发出的请求是:https://api.example.com/user?id=123&type=vip
常见错误现象:
- URL 里手动写了
?id=123,又传了data: {id: 123}→ 参数重复,后端收两个id -
data是字符串(如"id=123")→ 不会被解析,直接丢弃,URL 无参数 -
data是数组(如[{id: 1}])→ 转成字符串后变成"[object Object]",后端无法识别
小程序平台下 GET 请求失败的典型原因
uni-app 的 uni.request 在小程序端受限于微信/支付宝等平台规则,不是所有 URL 都能发:
- 域名必须提前配置在
manifest.json或 HBuilderX 的「发行 → 小程序设置 → 合法域名」里 - HTTP 协议不被允许,必须用 HTTPS(本地调试可临时勾选「不校验合法域名」,但上线前必须关掉)
- 本地
localhost、127.0.0.1、http://地址在真机上一定失败,仅开发工具模拟可用
所以开发阶段建议:
- 后端接口先部署到 HTTPS 测试环境(哪怕只是临时的 ngrok 或 v4/v6 内网穿透)
- 真机调试前务必检查「项目 → manifest.json → 微信小程序 → request 合法域名」是否填对
- 控制台报错
request:fail net::ERR_CONNECTION_REFUSED或net::ERR_INSECURE_RESPONSE,基本就是域名或协议问题
GET 请求要不要加 header?
一般不用。但有两个例外场景必须加:
- 接口需要认证 token:加
header: { Authorization: 'Bearer xxx' } - 后端要求特定
Accept或User-Agent:按接口文档填,比如header: { Accept: 'application/vnd.api+json' }
注意:content-type 对 GET 请求无效,uni.request 会忽略它 —— 因为 GET 没有请求体,设了也白设。
真正容易被忽略的是:GET 请求的 data 不能嵌套过深,也不能含特殊字符(如中文、空格、斜杠)而不经编码。虽然 uni.request 会自动调用 encodeURIComponent,但只作用于第一层 key/value。如果传了 { filter: { name: '张三' } },最终变成 filter=[object%20Object],后端根本没法解析。
所以,复杂结构请自己序列化:data: { filter: JSON.stringify({ name: '张三' }) },再由后端 JSON.parse()。


















