m***@163.com
m***@163.com
  • 发布:54 分钟前
  • 更新:34 分钟前
  • 阅读:29

【报Bug】uniappx,使用uni.request无论怎么写都报错Error message parsing failed

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: windows 11 21H2

HBuilderX类型: 正式

HBuilderX版本号: 5.07

手机系统: Android

手机系统版本号: Android 14

手机厂商: 小米

手机机型: Redmi K50

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
uni.request<UTSJSONObject>({  
url: "http://47.239.241.80:8088/webApi/nologin/demandList",  
data: {  
orderType: '1',  
pageNum: 1,  
pageSize: 6,  
yyType: 'en'  
},  
success(res) {  
console.log('success', res)  
},  
fail(err) {  
console.log('error', err)  
}  
})

操作步骤:

直接请求代码示例

预期结果:

返回结果不报错

实际结果:

报错Error message parsing failed

bug描述:

提交了issues#28980,好几天了没有消息,麻烦官方看到了回复一下,上周还能偶尔请求成功,现在直接完全不行了

54 分钟前 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

需要补充平台分类(鸿蒙),并提供详细的隐私政策配置、HBuilderX版本信息及具体的报错日志。
欢迎到专业群( uni-app x技术交流群 ) 咨询,群中有相关专业的管理员和群友。

作为DCloud官方人员,我对这个bug反馈进行如下评审:


反馈完整性评审

这个反馈的完整性总体较好,但有几个关键点需要补充说明:

  1. BUG描述:描述较为简略,提到"上周还能偶尔请求成功,现在直接完全不行了",但没有说明上周和现在之间是否有过任何代码或环境变更。这个时间线信息很关键,有助于判断是服务端变更还是客户端问题。

  2. 代码示例:示例代码比较完整,可以直接用于复现。但需要注意,这里使用了泛型参数<UTSJSONObject>,这个细节与问题可能直接相关。

  3. 复现步骤:描述为"直接请求代码示例",过于简略。建议补充:是标准基座运行还是自定义基座运行,以及是否尝试过切换网络环境等。

  4. 分类信息:版本信息完整,HBuilderX 5.07正式版、Android 14、小米设备等信息齐全,值得肯定。


Bug是否成立分析

根据知识库中的对话记录,这个问题的根本原因很可能不是框架Bug,而是泛型类型使用问题

在知识库中,有用户遇到了完全相同的错误:

  • 错误信息:"error message parsing failed"、"error message invalid json"
  • 错误码:100002
  • 错误对象:io.dcloud.uniapp.sourceerror

知识库中其他用户的讨论明确指出:"一定是request传递了type类型""传递了的话返回的数据必须和定义的一致,否则就是这个报错"

您代码中的uni.request<UTSJSONObject>(...)使用了泛型参数<UTSJSONObject>。当服务器返回的数据结构与UTSJSONObject的预期不匹配时(例如返回的不是有效JSON、或者返回了空字符串等),就会触发这个解析错误。

同一个讨论中,用户反馈去掉泛型后虽然success执行了,但statusCode为400,这说明服务器本身返回了异常状态码,而泛型类型定义与异常响应的数据结构不一致,导致解析失败。


问题排查建议

  1. 先去掉泛型参数,改为uni.request({...}),观察实际返回的原始数据是什么,确认服务器是否正常返回。

  2. 检查服务器返回的Content-Type,确保是application/json

  3. 如果服务器返回的是字符串而非JSON对象,可以参考ISSUE系统(issues.dcloud.net.cn/pages/issues/detail?id=25391)中的处理方案,设置Content-Type: text/plain来保持body为字符串。

  4. 如果确实需要使用泛型,请确保定义的类型结构与服务器成功响应时的JSON结构完全一致,包括字段名、类型、可选性等。当服务器返回错误状态码(如400、500)时,响应体结构可能与成功时不同,这也会导致泛型解析失败。


总结

该bug反馈大概率是误报,问题根源在于使用了泛型类型约束,而服务器响应数据与泛型类型定义不匹配导致解析失败。建议先去掉泛型进行排查,确认服务器返回的实际数据格式后再决定是否需要使用泛型以及如何定义泛型类型。

如果去掉泛型后仍然无法正常请求,请提供更多信息(如服务器实际返回的原始数据、完整的错误日志等),我们再进一步排查。

内容为 AI 生成,仅供参考
m***@163.com

m***@163.com (作者)

找到问题了,挂着vpn导致的访问不到服务器

要回复问题请先登录注册