如何在特定的ajax调用上调用.ajaxStart()

时间:2009-07-28 01:23:49

标签: jquery ajax progress-bar preloader

我根据ajax状态显示或隐藏进度条的网站文档上有一些ajax调用

  $(document).ajaxStart(function(){ 
        $('#ajaxProgress').show(); 
    });
  $(document).ajaxStop(function(){ 
        $('#ajaxProgress').hide(); 
    });

我想基本上在网站的其他部分覆盖这些方法,在这些网站上进行了很多快速的小型ajax调用,并且不需要进出弹出的进度条。我试图将它们附加到其他$ .getJSON和$ .ajax调用中或插入它们。我试过把它们链接起来,但显然这不好。

$.getJSON().ajaxStart(function(){ 'kill preloader'});

10 个答案:

答案 0 :(得分:35)

2018注:这个答案已经过时;随意提出对此答案的编辑。

您可以使用自定义命名空间绑定ajaxStart和ajaxStop:

$(document).bind("ajaxStart.mine", function() {
    $('#ajaxProgress').show();
});

$(document).bind("ajaxStop.mine", function() {
    $('#ajaxProgress').hide();
});

然后,在网站的其他部分,您将暂时取消绑定之前您的.json电话:

$(document).unbind(".mine");

在搜索答案时从here得到了这个想法。

编辑:我没有时间去测试它,唉。

答案 1 :(得分:15)

如果你把它放在处理ajax动作的函数中,它只会在适当的时候自行绑定:

$('#yourDiv')
    .ajaxStart(function(){
        $("ResultsDiv").hide();
        $(this).show();
    })
    .ajaxStop(function(){
        $(this).hide();
        $(this).unbind("ajaxStart");
    });

答案 2 :(得分:13)

选项对象中有一个属性.ajax()称为全局

如果设置为 false ,则不会触发 ajaxStart 事件。

    $.ajax({
        url: "google.com",
        type: "GET",
        dataType: "json",
        cache: false,
        global: false, 
        success: function (data) {

答案 3 :(得分:8)

使用本地范围的Ajax事件

                success: function (jQxhr, errorCode, errorThrown) {
                    alert("Error : " + errorThrown);
                },
                beforeSend: function () {
                    $("#loading-image").show();
                },
                complete: function () {
                    $("#loading-image").hide();
                }

答案 4 :(得分:7)

此外,如果您要停用.ajaxStart().ajaxStop()的来电,您可以在global中设置false选项1}}请求;)

在此处查看更多内容:How to call .ajaxStart() on specific ajax calls

答案 5 :(得分:3)

不幸的是,ajaxStart事件没有任何可用于决定是否显示动画的附加信息。

无论如何,这是一个想法。在你的ajaxStart方法中,为什么不说200毫秒后才开始动画?如果ajax请求在200毫秒内完成,则不显示任何动画,否则显示动画。代码可能类似于:

var animationController = function animationController()
{
    var timeout = null;
    var delayBy = 200; //Number of milliseconds to wait before ajax animation starts.

    var pub = {};

    var actualAnimationStart = function actualAnimationStart()
    {
        $('#ajaxProgress').show();
    };

    var actualAnimationStop = function actualAnimationStop()
    {
        $('#ajaxProgress').hide();
    };

    pub.startAnimation = function animationController$startAnimation() 
    { 
        timeout = setTimeout(actualAnimationStart, delayBy);
    };

    pub.stopAnimation = function animationController$stopAnimation()
    {
        //If ajax call finishes before the timeout occurs, we wouldn't have 
        //shown any animation.
        clearTimeout(timeout);
        actualAnimationStop();
    }

    return pub;
}();


$(document).ready(
    function()
    {
        $(document).ajaxStart(animationController.startAnimation);
        $(document).ajaxStop(animationController.stopAnimation);
    }
 );

答案 6 :(得分:2)

在ajax调用中使用beforeSend或完成回调函数,就像这样...... 现场示例在这里 https://stackoverflow.com/a/34940340/5361795

来源ShoutingCode

答案 7 :(得分:1)

我有一个解决方案。 我设置了一个名为showloader的全局js变量(默认设置为false)。在您要显示加载程序的任何函数中,只需在进行ajax调用之前将其设置为true。

function doAjaxThing()
{
    showloader=true;
    $.ajax({yaddayadda});
}

然后我的头部有以下内容;

$(document).ajaxStart(function()
{
    if (showloader)
    {
        $('.loadingholder').fadeIn(200);
    }
});    

$(document).ajaxComplete(function() 
{
    $('.loadingholder').fadeOut(200);
    showloader=false;
});

答案 8 :(得分:0)

如果要在决定执行操作之前查询请求,请使用ajaxSend和ajaxComplete。请在此处查看我的回复:https://stackoverflow.com/a/15763341/117268

答案 9 :(得分:0)

<div class="Local">Trigger</div>

<div class="result"></div>
<div class="log"></div>

$(document).ajaxStart(function() {
$( "log" )text( "Trigger Fire successfully." );
});

$( ".local" ).click(function() {
$( ".result" ).load("c:/refresh.html.");
});

通过这个例子,你会有所了解。当用户点击带有Local类的元素并发送Ajax请求时,会显示日志消息。