js:快速点击两个按钮,出现两个接口数据在同一个按钮下面同时显示的bug

问:

if($(this).attr('tit') === 'undefined'){

reloadNotificationMessageList(0)

} else if($(this).attr('tit') === 'readed'){

reloadNotificationMessageList(1)

}这段代码有个问题,当我快速点击0和1进行切换的时候,由于已读信息太多接口返回时间过长,未读信息很少立刻就返回了,导致我快速来回切换后,虽然现在在未读信息列表,虽然现在没有未读信息,但是却同时显示了已读信息

回答:

javascript 复制代码
你描述的问题是由于异步请求的延迟导致的。当你快速切换未读和已读消息列表时,请求的返回顺序可能会混乱,导致界面显示不正确的数据。

为了解决这个问题,你可以使用一个标志变量来跟踪当前请求的状态,并确保只有最新的请求结果会更新界面。以下是一个改进的示例代码:

let currentRequestType = null;
let currentRequestId = 0;

function reloadNotificationMessageList(type) {
    currentRequestId++;
    currentRequestType = type;
    const requestId = currentRequestId;

    // 模拟 AJAX 请求
    setTimeout(function() {
        if (requestId === currentRequestId) {
            if (type === 0) {
                // 处理未读消息
                console.log('显示未读消息');
            } else if (type === 1) {
                // 处理已读消息
                console.log('显示已读消息');
            }
        }
    }, Math.random() * 2000); // 随机延迟模拟网络请求
}

$(document).ready(function() {
    $('.notification-tab').on('click', function() {
        const tit = $(this).attr('tit');
        if (tit === 'undefined') {
            reloadNotificationMessageList(0);
        } else if (tit === 'readed') {
            reloadNotificationMessageList(1);
        }
    });
});

在这个示例中,我们引入了两个变量 `currentRequestType` 和 `currentRequestId`。每次调用 `reloadNotificationMessageList` 时,我们增加 `currentRequestId`,并将当前请求的类型存储在 `currentRequestType` 中。在请求完成时,我们检查请求的 ID 是否与当前请求的 ID 匹配,如果匹配,则更新界面。

这样可以确保只有最新的请求结果会更新界面,避免了快速切换时界面显示不正确的数据。

你可以根据实际情况调整代码,例如将模拟的 `setTimeout` 替换为实际的 AJAX 请求。
相关推荐
万粉变现经纪人19 小时前
如何解决 pip install SSL 报错 ValueError: check_hostname requires server_hostname 问题
网络·python·网络协议·beautifulsoup·bug·ssl·pip
万粉变现经纪人1 天前
如何解决 pip install 代理报错 SOCKS5 握手失败 ReadTimeoutError 问题
java·python·pycharm·beautifulsoup·bug·pandas·pip
陌路物是人非2 天前
记一个 @Resource BUG
java·开发语言·bug
冬奇Lab2 天前
稳定性性能系列之四——异常日志机制与进程冻结:问题排查的黑匣子
android·性能优化·车载系统·bug
_OP_CHEN2 天前
【测试理论与实践】(三)测试BUG篇:从 BUG 本质到实战博弈,带你吃透软件测试的核心逻辑
运维·测试开发·产品运营·bug·压力测试·测试
-拟墨画扇-4 天前
Git | Bug分支操作
git·gitee·github·bug·gitcode
小凡子空白在线学习4 天前
Bug目录
bug
jiedaodezhuti5 天前
秒级定位线上Bug的一些命令
bug
l1t7 天前
修改一个触发PostgreSQL 17.2 bug的SQL
sql·postgresql·bug
包小黑7 天前
【Linux】bug登记好习惯:发现bug,用命令行截取对应日志
linux·bug