uni-app uni.request data传入JSON字符串 鸿蒙平台运行参数多了空格 接口报错 其他平台可以正常运行

uni-app uni.request data传入JSON字符串 鸿蒙平台运行参数多了空格 接口报错 其他平台可以正常运行

开发环境 版本号 项目创建方式
Mac 14.5 (23F79) HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Mac

HBuilderX类型:正式

HBuilderX版本号:4.56

手机系统:HarmonyOS NEXT

手机系统版本号:HarmonyOS NEXT Developer Beta2

手机厂商:华为

手机机型:Mate60

页面类型:vue

vue版本:vue3

打包方式:云端

项目创建方式:HBuilderX


示例代码:

uni.request({
url: 'https://www.example.com/request', //仅为示例,并非真实接口地址。
method: 'POST',
data: {
text: 'uni.request'
},
header: {
'custom-header': 'hello' //自定义请求头信息
},
success: (res) => {
console.log(res.data);
this.text = 'request success';
}
});

uni.request({
url: 'https://www.example.com/request', //仅为示例,并非真实接口地址。
method: 'POST',
data: JSON.stringify({
text: 'uni.request'
}),
header: {
'custom-header': 'hello' //自定义请求头信息
},
success: (res) => {
console.log(res.data);
this.text = 'request success';
}
});

两个方法的写在在鸿蒙平台表现不一致, data传入 JSON.stringify({ text: ‘uni.request’ }) 后台接口报错 400 。


---

### 操作步骤:


```javascript
uni.request({
url: 'https://www.example.com/request', //仅为示例,并非真实接口地址。
method: 'POST',
data: {
text: 'uni.request'
},
header: {
'custom-header': 'hello' //自定义请求头信息
},
success: (res) => {
console.log(res.data);
this.text = 'request success';
}
});

uni.request({
url: 'https://www.example.com/request', //仅为示例,并非真实接口地址。
method: 'POST',
data: JSON.stringify({
text: 'uni.request'
}),
header: {
'custom-header': 'hello' //自定义请求头信息
},
success: (res) => {
console.log(res.data);
this.text = 'request success';
}
});

两个方法的写在在鸿蒙平台表现不一致, data传入 JSON.stringify({ text: ‘uni.request’ }) 后台接口报错 400 。


---

### 预期结果:


两个方法的写在在鸿蒙平台表现一致

实际结果:

两个方法的写在在鸿蒙平台表现不一致, data传入 JSON.stringify({ text: ‘uni.request’ }) 后台接口报错 400 。


---

### bug描述:


uni.request data传入JSON字符串,鸿蒙平台运行参数多了空格,接口报错, 其他平台可以正常运行  

更多关于uni-app uni.request data传入JSON字符串 鸿蒙平台运行参数多了空格 接口报错 其他平台可以正常运行的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

HBuilderX 4.61.2025040322-alpha 已修复。

更多关于uni-app uni.request data传入JSON字符串 鸿蒙平台运行参数多了空格 接口报错 其他平台可以正常运行的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


更新: 问题已确认存在差异,会进行处理。你可以临时规避此写法

发一个问题截图吧,多空格多在了哪里?是 json. stringfy 的结果不一样吗

截图如下

你先谁用 data: json 吧,先不使用 json.stringify 先规避

这是鸿蒙平台对JSON.stringify()处理的一个已知差异问题。在鸿蒙平台上,当使用JSON.stringify()后直接作为data参数传递时,可能会在生成的JSON字符串中额外添加空格或换行符,导致服务端无法正确解析。

解决方案:

  1. 直接传递对象而不是字符串(推荐方式):
uni.request({
  url: 'https://www.example.com/request',
  method: 'POST',
  data: {text: 'uni.request'}, // 直接传对象
  header: {'Content-Type': 'application/json'}
});
  1. 如果需要手动序列化,可以先对字符串进行处理:
const payload = JSON.stringify({text: 'uni.request'}).replace(/\s+/g, '');
uni.request({
  url: 'https://www.example.com/request',
  method: 'POST',
  data: payload,
  header: {'Content-Type': 'application/json'}
});
回到顶部