You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决AG Grid级联下拉引发的多加载器闪烁问题

解决AG Grid级联下拉导致加载器频繁闪烁问题

我们此前将AJAX请求的加载器显隐逻辑统一移至_Layout.cshtml,通过ajaxStart和ajaxStop全局控制,但遇到了新问题:带有级联下拉框的AG Grid在执行保存操作时,会批量加载所有下拉列数据,导致加载器多次闪烁。我们希望在所有下拉数据加载过程中仅显示一次加载器,且无需在各页面单独处理该逻辑。

现有实现代码:

$(document).ready(function () {
    $(document).ajaxStart(function () {
        debugger;
        $("#cover-spin").fadeIn(50);
    });
    $(document).ajaxStop(function () {
        debugger;
        $("#cover-spin").fadeOut("slow");
    });
});

可行方案

1. 全局请求计数器 + 延迟隐藏策略

通过维护全局AJAX请求计数器,仅在第一个请求发起时显示加载器;隐藏时设置延迟,确保批量请求全部发起后再执行隐藏操作,避免频繁切换。

修改后的代码:

$(document).ready(function () {
    let ajaxRequestCount = 0;
    let hideLoaderTimeout;

    $(document).ajaxStart(function () {
        ajaxRequestCount++;
        // 仅第一个请求触发时显示加载器
        if (ajaxRequestCount === 1) {
            $("#cover-spin").fadeIn(50);
        }
        // 清除之前的延迟隐藏定时器
        clearTimeout(hideLoaderTimeout);
    });

    $(document).ajaxStop(function () {
        ajaxRequestCount--;
        // 延迟执行隐藏,避免批量请求导致的闪烁(时间可根据实际请求间隔调整)
        hideLoaderTimeout = setTimeout(function () {
            if (ajaxRequestCount === 0) {
                $("#cover-spin").fadeOut("slow");
            }
        }, 300);
    });
});

2. 针对AG Grid下拉请求精准控制

如果能通过请求URL、参数等特征识别AG Grid的下拉请求,可以单独对这类请求合并加载状态,忽略单个请求的显隐触发,只在首个下拉请求发起时显示,最后一个完成时隐藏。

示例代码(假设AG Grid下拉请求URL包含/api/dropdown):

$(document).ready(function () {
    let dropdownRequestCount = 0;
    let isLoaderShown = false;

    $(document).ajaxSend(function(event, jqxhr, settings) {
        // 判断是否为AG Grid下拉请求
        if (settings.url.includes("/api/dropdown")) {
            dropdownRequestCount++;
            if (dropdownRequestCount === 1 && !isLoaderShown) {
                $("#cover-spin").fadeIn(50);
                isLoaderShown = true;
            }
        } else {
            // 非下拉请求按原有逻辑处理
            if (!isLoaderShown) {
                $("#cover-spin").fadeIn(50);
                isLoaderShown = true;
            }
        }
    });

    $(document).ajaxComplete(function(event, jqxhr, settings) {
        if (settings.url.includes("/api/dropdown")) {
            dropdownRequestCount--;
            // 所有下拉请求完成且无其他AJAX请求时隐藏
            if (dropdownRequestCount === 0 && $.active === 0) {
                $("#cover-spin").fadeOut("slow");
                isLoaderShown = false;
            }
        } else {
            // 非下拉请求全部完成时隐藏
            if ($.active === 0) {
                $("#cover-spin").fadeOut("slow");
                isLoaderShown = false;
            }
        }
    });
});

方案说明

  • 第一种方案通用性强,无需识别特定请求类型,通过计数器和延迟处理即可解决批量请求导致的闪烁问题,适合大多数场景。
  • 第二种方案更精准,针对AG Grid下拉请求单独控制,适合能明确区分请求类型的场景。

内容的提问来源于stack exchange,提问作者N2J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:19:52