如何在React Native中为Axios GET请求发送原始JSON格式参数
问题原因
Axios发送GET请求时默认不会处理data字段的请求体参数,同时HTTP规范也不推荐GET请求携带请求体,绝大多数后端服务默认也不会解析GET请求的请求体内容,所以你当前的代码无法传递过滤参数。
解决方案
方案1:使用params字段传参(推荐)
将过滤参数放在params字段中,Axios会自动将参数序列化为URL查询字符串,符合HTTP规范,兼容性最好。
修改后代码如下:
const GetData = () => { axios({ method: 'get', url: 'http://10.0.2.2:3000/DonarsRecod', // 原data字段替换为params params: { organ: "Lungs" } }) .then(function(response) { console.log("response", JSON.stringify(response.data)) }) .catch(function(error) { console.log("error", error) }) }
请求最终会发往地址http://10.0.2.2:3000/DonarsRecod?organ=Lungs,后端直接读取查询参数过滤返回匹配记录即可。
方案2:强制GET请求携带JSON请求体(不推荐)
如果后端接口明确要求GET请求必须传递JSON格式的请求体,可以手动指定请求头让Axios携带请求体,注意该方案不符合HTTP规范,部分代理服务器会直接丢弃GET请求的请求体,可能导致请求失败。
修改后代码如下:
const GetData = () => { axios({ method: 'get', url: 'http://10.0.2.2:3000/DonarsRecod', data: { organ: "Lungs" }, // 手动指定请求内容类型为JSON headers: { 'Content-Type': 'application/json' } }) .then(function(response) { console.log("response", JSON.stringify(response.data)) }) .catch(function(error) { console.log("error", error) }) }
注意事项
- React Native环境不存在浏览器跨域限制,安卓模拟器使用
10.0.2.2访问本地后端服务是正常的,真机测试时需要将URL中的IP替换为后端服务所在设备的局域网IP,确保手机和后端服务在同一局域网下。 - 优先选择查询参数传参方案,避免不必要的兼容问题。
内容的提问来源于stack exchange,提问作者Mian Muhammad Ramzan
相关产品推荐
相关产品推荐

