服务器返回一个 protobuf 的全部默认值 就会出现,不是全部是默认值就没问题
- 发布:2025-06-14 15:50
- 更新:2025-12-15 10:46
- 阅读:241
【报Bug】uni.request. 报错 TypeError: undefined is not an object (evaluating 'e.length')
产品分类: uniapp/App
PC开发环境操作系统: Mac
PC开发环境操作系统版本号: 15.5 (24F74)
HBuilderX类型: 正式
HBuilderX版本号: 4.66
手机系统: iOS
手机系统版本号: iOS 17
手机厂商: 苹果
手机机型: 12 mini
页面类型: vue
vue版本: vue3
打包方式: 云端
项目创建方式: HBuilderX
操作步骤:
预期结果:
跟 web 环境一样 ,能够在 success 里面正常进入
跟 web 环境一样 ,能够在 success 里面正常进入
实际结果:
报错了 TypeError: undefined is not an object (evaluating 'e.length')
报错了 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')
3 个回复
DCloud_UNI_JBB
您好,麻烦发个可复现demo
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 生成,仅供参考