jQuery Bootgrid 如何检查 bootgrid 是否仍在加载

jQuery Bootgrid how to check if bootgrid is still loading

我已经实现了 jQuery Bootgrid。我想管理显示和隐藏我已经实现的加载器。

加载程序分别使用 $("#ajaxLoader").show(); 和 $("#ajaxLoader").hide();` 显示和隐藏。

我的 Bootgrid 初始化实现如下:

var grid = $('#grid').on("load.rs.jquery.bootgrid", function () {
    $("#ajaxLoader").show();
}).bootgrid({
    ajax: true,
    ajaxSettings: {
        method: "GET",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        cache: false
    },
    searchSettings: {
        delay: 500,
    },
    url: myURL,
    rowCount: [5, 10, 50, 75, 100, 200, -1]
}).on("loaded.rs.jquery.bootgrid", function (e) {
   $("#ajaxLoader").hide();
});

现在效果很好,但我想通过两种方式对其进行优化:

  1. Bootgrid 的搜索功能似乎有它自己的加载程序,所以有没有办法在搜索发生时不显示我的 ajax 加载程序?

  2. 我的加载器在短查询时弹出和隐藏的速度非常快。有什么办法可以延迟这种情况发生吗?

解决选项 2 可能会自行解决选项 1,但无论如何,这是我对选项 2 的尝试。

我试过 setTimeout(function () { $("#ajaxLoader").show(); }, 1000);,但是它再也不会被隐藏了。我通过使用 setTimeout(function () { $("#ajaxLoader").hide(); }, 1000) 解决了这个问题,但随后它不必要地闪烁显示和隐藏。

所以理想情况下,我需要在应用该功能之前检查 Bootgrid 是否仍在加载。

如何解决加载问题?

编辑:

我也试过设置一个 loading 变量,在我的 load 方法中我说:

loading = true;
setTimeout(function () { if (loading) { $("#ajaxLoader").show(); }}, 1000);

以及我的 loaded 活动中的以下内容:

setTimeout(function () { $("#ajaxLoader").hide(); }, loaderDelay);

那仍然给我同样的闪烁错误。

我使用 clearTimeout() 函数解决了这个问题,如下所示:

var showLoader;

var grid = $('#grid').on("load.rs.jquery.bootgrid", function () {
    showLoader = setTimeout(function () { $("#ajaxLoader").show(); }, 1000);
}).bootgrid({
    ajax: true,
    ajaxSettings: {
        method: "GET",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        cache: false
    },
    searchSettings: {
        clearTimeout(showLoader);
        delay: 500,
    },
    url: myURL,
    rowCount: [5, 10, 50, 75, 100, 200, -1]
}).on("loaded.rs.jquery.bootgrid", function (e) {
   $("#ajaxLoader").hide();
});