uni-app项目编译到微信小程序中遇重大bug,部分机型无线网切换流量后无法正常请求服务器
uni-app项目编译到微信小程序中遇重大bug,部分机型无线网切换流量后无法正常请求服务器
项目 | 信息 |
---|---|
产品分类 | uniapp/小程序/微信 |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | win10 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 3.2.9 |
第三方开发者工具版本号 | 1.05.2106300 |
基础库版本号 | 2.18 |
项目创建方式 | HBuilderX |
操作步骤:
1:退出微信进程
2:同时打开无线网和流量
3:成功连上网之后打开微信
4:打开相关小程序
5:关闭无线网
6:流量无法连接服务器(返回微信,流量可正常上网)
预期结果:
无线网和流量应该都可以连接服务器
实际结果:
流量无法连接服务器(原生小程序没有此类问题)
bug描述:
部分机型编译到小程序当中,无线网切换流量,无法正常请求服务器(目前在ios机型中稳定复现了此问题)
官网给出的第三方开发者案例中,以星巴克小程序为例,用ios机型测试同样也存在此类问题,请官方尽快查询问题原因
应该是微信的问题, 起了一个微信的项目, 在切换流量后, 第一次点击无效, 第二次有效, 发帖作者 应该是接口上有防抖,在第一次无效后没有回调导致防抖开关没有关,导致后续一直无效
有求证精神,赞一个。
第三方的小程序示例地址 发一下 我测一下
官网示例那个星巴克小程序就可以测
这么严重的bug,也没有官方人员回复了吗?
在官网那个地方啊 你把链接发一下,找了一圈没找到呢
好的
请问一下,有确认bug吗
uni-app 主要处理 Vue 语法到 小程序语法的转换,理论上和网络以及硬件无关,请测试对比测试一下原生小程序是否存在类似问题。
原生小程序没有此类问题,我试过了,目前测试过的所有uni-app打包的小程序,都有此类问题。包括官方示例都存在此问题,ios上可以复现
回复 fchany: 可以使用uni-app和不使用uni-app分别写两个逻辑相同的应用测试对比一下。
回复 DCloud_UNI_GSQ: 我们所有用uni-app开发的小程序都有此类问题,原生的开发的都没有,你们自己用ios测试一下就知道了。我都怀疑你们自己都没有测试
回复 fchany: 由于uni-app到小程序只做vue语法转换,不会涉及API,所以不会测试小程序API在不同网络的兼容性。
回复 DCloud_UNI_GSQ: 测一下试试呢,理论上你说的有道理,但是原生小程序确实不存在此类问题
回复 fchany: 建议进行一下详细的对比测试,提供准确的情况后,才会进行排查。
回复 DCloud_UNI_GSQ: 我描述的情况还不够准确吗,你们拿ios简单按照我的流程测试一下就好了,这个不是小问题
看来真是没人管了,如此重大的问题不管不顾
尽快反馈给微信小程序社区修复啊
能复现
测试 从无线切换流量后, uni.request 调用后无反应
回复 DCloud_UNI_GSQ: 对比 wx.request 是否存在一样的问题。
uni.request也是调用的wx.request吧
回复 冬天的太阳: 是的,不过可能开发者不信。
在 uni-app 项目编译到微信小程序时,遇到部分机型在无线网切换流量后无法正常请求服务器的问题,可能涉及多个方面的原因。以下是一些可能的原因和解决方案:
1. 网络环境切换问题
- 原因:部分机型在无线网切换流量时,网络环境发生变化,可能导致网络请求失败。
- 解决方案:
- 监听网络状态变化,在切换网络时重新发起请求。
- 使用微信小程序的
wx.onNetworkStatusChange
方法监听网络状态变化:wx.onNetworkStatusChange((res) => { if (res.isConnected) { // 网络恢复,重新发起请求 this.reloadData(); } });
2. DNS 解析问题
- 原因:切换网络后,DNS 解析可能未及时更新,导致请求失败。
- 解决方案:
- 在请求失败时,尝试重新解析域名或使用 IP 地址直接请求。
- 使用
wx.request
的timeout
参数设置超时时间,避免请求卡住:wx.request({ url: 'https://example.com/api', timeout: 10000, // 10秒超时 success(res) { console.log(res.data); }, fail(err) { console.error('请求失败', err); } });
3. SSL 证书问题
- 原因:部分机型在切换网络后,可能对 SSL 证书的校验更严格,导致请求失败。
- 解决方案:
- 确保服务器配置了有效的 SSL 证书。
- 检查证书是否被信任,避免使用自签名证书。
4. 缓存问题
- 原因:网络切换后,缓存可能导致请求失败或返回旧数据。
- 解决方案:
- 在请求时禁用缓存:
wx.request({ url: 'https://example.com/api', header: { 'Cache-Control': 'no-cache' }, success(res) { console.log(res.data); } });
- 在请求时禁用缓存: