uni-app 连接服务器超时 点击屏幕重试

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app 连接服务器超时 点击屏幕重试

30 回复

你们没登录账号,左下角登录一下账号 再刷新试一下


我是本地开发环境下有问题,发布后没问题。我在HbuilderX中登录了账号,重新跑一下项目,可行,前台也不报错了

我也遇到这种情况了。一点头绪都没有。看来uniapp的坑还是比较多的。用户的两部手机都出现这样的情况。而且每次发布版本后,出错的页面不一样。有时是这个页面报错,有时是那个页面报错。

关键报错,还不是弹出原生的错误,都是封装的错误,让我们怎么排查错误,这个太坑了

回复 9***@qq.com: 这边目前解决了吗

能说一下最后怎么解决的吗?

回复 疾风kkk: 我们之前有一个项目线上也出现锅这样的情况,后面是后端那边启用https + 前端这边设置延长请求超时,后面就没复现过了 ,也不知道到底是不是这个起了作用,如果你这边还没解决的话可以试试。

是缓存的问题。每次更新的时候,把服务器上原来的文件都删除了,重新上载新的打包文件就可以了。

没有用的,如果是缓存问题,多刷新几次基本上是可以显示出来的,而且也不可能每次更新都让用户自己去清理缓存的

回复 9***@qq.com: 我是这么解决的。目前每次更新都没有再出现这个问题。

我这几天也出现这问题,在内置浏览器和chrome上都不行,换了几个网也不行。


请问这个问题解决了吗

回复 8***@qq.com: 怎么解决

请问你是怎么解决的呀!

能说说怎么解决的吗?

老哥,这问题解决了吗??

请问楼主解决了吗?

之前每次更新前端的时候,会直接把所有文件覆盖更新到服务器里,由于每次打包的js或者css等文件名称都是不同的,所以这种覆盖更新会导致旧版本的js、css文件也保留,猜测可能是浏览器缓存访问旧版js文件可以访问到,所以不会刷新缓存。后来更新时先把旧版文件全部删除,再更新,就不会出现这个问题了

删除后再更新也是会

回复 4***@qq.com: 有解决吗?

你们是怎么解决的呀!

哪位老哥能给个思路,遇到这个问题,一点头绪都没有。

我也遇到这个问题了,至今无法解决

我也遇到过次问题,如何解决

我也遇到过这个问题。后面慢慢缩小排查范围,发现是vue一处语法问题。我用了“??”去判断,后面改成“||”就行了。在IOS系统下运行是可以的,Android就不行。推测是浏览器内核不一样,支持的语法不一样。

我两个苹果手机,一个 se 一个是 6 plus ,se显示正常,6plus 显示连接超时,点击屏幕重试。

我敲,一模一样,我也遇到了,“连接服务器超时,点击屏幕重试”,这个情况出现在每次更新后,总有几个用户手机会出现,而且出现这个的页面不固定,针对这个问题有以下几种解决方式,不一定都100%有效,但是可以挨个试一试

因为版本迭代原因,上次使用到的文件或者素材在这次版本更新被删除了,设备运行产品的时候因为缓存原因读不到原先文件素材导致的 解决方案:打包的时候现将之前的文件全部删除,然后把这次的文件上传,不建议直接替换 2.本地图片尽可能放到服务器上,避免包体积过大

在处理 uni-app 连接服务器超时并实现点击屏幕重试的功能时,你可以通过以下步骤来实现:

  1. 设置请求超时:在发起网络请求时,设置请求的超时时间。

  2. 处理超时错误:在请求回调中,检查是否发生超时错误。

  3. 实现重试功能:在发生超时错误时,显示重试按钮,并在用户点击按钮时重新发起请求。

下面是一个简单的代码示例,展示了如何实现这一功能:

1. 设置请求超时

使用 uni.request 发起请求,并设置 timeout 参数。

function fetchData() {
    uni.request({
        url: 'https://your-server-url.com/api/data',
        method: 'GET',
        timeout: 5000, // 设置超时时间为5秒
        success: (res) => {
            console.log('请求成功:', res.data);
            // 处理请求成功后的逻辑
        },
        fail: (err) => {
            if (err.errMsg === 'request:fail timeout') {
                // 处理超时错误
                handleTimeout();
            } else {
                // 处理其他请求错误
                console.error('请求失败:', err);
            }
        }
    });
}

2. 处理超时错误

在超时错误发生时,显示重试按钮。

let retryButton;

function handleTimeout() {
    // 隐藏其他内容,显示重试按钮
    retryButton = uni.createSelectorQuery().select('#retry-button');
    retryButton.boundingClientRect(data => {
        if (data) {
            uni.showToast({
                title: '连接服务器超时,请点击重试',
                icon: 'none'
            });
            // 假设你有一个页面元素 <button id="retry-button">重试</button>
            document.getElementById('retry-button').style.display = 'block';
        }
    }).exec();
}

3. 实现重试功能

在重试按钮的点击事件中,重新发起请求。

<!-- 在你的页面中添加一个重试按钮 -->
<button id="retry-button" style="display:none;" @click="retry">重试</button>
function retry() {
    // 隐藏重试按钮(可选)
    document.getElementById('retry-button').style.display = 'none';
    // 重新发起请求
    fetchData();
}

完整代码示例

将上述代码片段整合到你的 uni-app 项目中,确保你的页面结构和逻辑与之匹配。这样,当连接服务器超时时,用户将看到一个重试按钮,点击该按钮可以重新发起请求。

请注意,这只是一个基本的示例,实际应用中你可能需要处理更多的细节和异常情况,比如网络状态检测、多次重试的限制等。

回到顶部