0

我正在使用 Jonathan Sampson 对我的 jquery 繁忙加载程序的回答。它可以 100% 工作并检测任何 jquery 发布等并显示加载程序。

我的问题是,大多数时候我希望用户在我从数据库中获取信息时等待,很高兴加载器出现。

但是,我想要的是某些功能,仅当我将信息保存到数据库时加载程序不显示。

小提琴可以在这里找到

例如,下面会导致加载程序运行。我怎样才能修改这个,所以 mockjax 知道不只为这个函数运行?

$(document).on("click", function(){
    $.get("/mockjax");        
});

一如既往地感谢您的帮助。

4

2 回答 2

1

短版(带代码)

单击标题 -动画

单击段落 -无动画

http://jsfiddle.net/hPS2v/

$.ajax({
    url: "/mockjax",
    type: "GET",
    global: false //This is the key
});

--

稍长的版本

$.ajax() 方法中有一个很好的变量,它可以让你停止 ajax 事件的触发(但不是 ajax 本身)。这称为全局。从文档

全局(默认:true)

类型:布尔值

是否为此请求触发全局 Ajax 事件处理程序。默认值为真。设置为 false 以防止触发 ajaxStart 或 ajaxStop 等全局处理程序。这可用于控制各种 Ajax 事件。

考虑到这一点,我稍微更改了您的代码以演示我们如何使其工作。

1) 将 AJAX 调用移动到具有 2 个参数的函数中:URL 和 eventTrigger。基本上,我们希望 URL 为“/mockajax”,并且 eventTrigger 为 true 或 false(取决于您是否以及何时要显示动画)

2) 我从 $(document) 中删除了事件处理程序,并向标题标签和 p 标签添加了 2 个事件,这样我就可以使用相同的代码在 2 个地方演示 AJAX 工作(1 个有动画,1 个没有动画)

希望这可以帮助!

于 2014-03-13T06:38:31.423 回答
1

您可以使用变量作为标志,表示您不希望显示加载程序。

//let say, showLoader, by default true
var showLoader = true;

现在,根据需要将其添加到您的 ajax 设置中。

$(document).on({
    ajaxStart: function () {
        // if showLoader true, then shows loading image
        if (showLoader)
            $body.addClass("loading");
    },
    ajaxStop: function () {
        $body.removeClass("loading");
        // set showLoader to true
        showLoader = true;
    }
});

根据您的要求更改showLoader状态。

$(document).on("click", function (e) {
    // if target element is anchor tag, then do not show loading image - example
    if (e.target.tagName === 'A') {
        showLoader = false;
    }
    $.get("/mockjax");
});

JSFiddle:http: //jsfiddle.net/VpDUG/5177/

希望能帮助到你。

于 2014-03-19T05:49:19.897 回答