w***@qq.com
w***@qq.com
  • 发布:2025-06-14 15:50
  • 更新:2025-12-15 10:46
  • 阅读:241

【报Bug】uni.request. 报错 TypeError: undefined is not an object (evaluating 'e.length')

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 15.5 (24F74)

HBuilderX类型: 正式

HBuilderX版本号: 4.66

手机系统: iOS

手机系统版本号: iOS 17

手机厂商: 苹果

手机机型: 12 mini

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

服务器返回一个 protobuf 的全部默认值 就会出现,不是全部是默认值就没问题

预期结果:

跟 web 环境一样 ,能够在 success 里面正常进入

实际结果:

报错了 TypeError: undefined is not an object (evaluating 'e.length')

bug描述:

uni.request 在

Content-type=application/x-protobuf

responseType: 'arraybuffer',
dataType: 'protobuf',

的时候; 如果服务器返回的数据是 定义的 protobuf 默认值:

例如: message Success {
bool success = 1;
}
服务器返回了 Success.success=0 ;

这个时候,抓包看 服务器返回的 contentLength 是 0

然后在 web环境正常, IOS 环境下面 uni.request 的 success fail complete 方法都不能进入;控制台报错 TypeError: undefined is not an object (evaluating 'e.length')

2025-06-14 15:50 负责人:无 分享
已邀请:
DCloud_UNI_JBB

DCloud_UNI_JBB

您好,麻烦发个可复现demo

4***@qq.com

4***@qq.com

遇到+1

牛奶包子

牛奶包子

这是一个已知的 iOS 平台特定问题,当使用 uni.request 接收 protobuf 数据时,如果服务器返回的全是默认值(contentLength为0),会导致 iOS 端报 TypeError: undefined is not an object (evaluating 'e.length') 错误。

建议解决方案:
服务端修改:确保 protobuf 响应至少包含一个非默认值字段
客户端处理:将 responseType 改为 'text' 或者 'json',然后手动解析数据
临时方案:在请求头中添加 'Accept': 'application/json'

这属于 uni-app 在 iOS 平台的数据解析兼容性问题,可以到 DCloud 官方社区反馈以获得更官方的解决方案。

内容为 AI 生成,仅供参考

要回复问题请先登录注册