正在进行Ajax请求的jQuery

时间:2010-05-20 09:01:56

标签: javascript jquery ajax

有没有办法检查是否有正在进行的ajax请求? 类似的东西:

if ( $.ajax.inProgress ){ do this; } else { do that; }

5 个答案:

答案 0 :(得分:11)

是的,有


$.ajax({
     type: 'get',
     url: 'url',
     data: {
              email: $email.val()
     },
     dataType: 'text',
     success: function(data)
     {
        if(data == '1')
        {
            $response.attr('style', '')
                     .attr('style', "color:red;")
                     .html('Email already registered please enter a different email.');
        }
        else
        {
            $response.attr('style', '')
                     .attr('style', "color:green;")
                     .html('Available');
        }
     },
     beforeSend: function(){
                $email.addClass('show_loading_in_right')
     },
     complete: function(){
                $email.removeClass('show_loading_in_right')
     }
});


当ajax请求刚刚启动时, beforeSend 将执行您需要执行的过程,并且当ajax请求完成时,将调用完成
documentation

答案 1 :(得分:7)

您基本上应该在脚本设置为false之上设置一个变量,并在ajax上将其设置为true并在success处理程序中将其设置为false described here

答案 2 :(得分:5)

要中止ajax请求, 使用

if($.active > 0){ 
ajx.abort();//where ajx is ajax variable
}

要继续运行ajax请求, 使用

if($.active > 0){ 
return;

} 

答案 3 :(得分:4)

你可能会喜欢这个:

$(document).ready(function() {
    var working = false;
    $("#contentLoading").ajaxSend(function(r, s) {
        $(this).show();
        $("#ready").hide();
        working = true;
    });

    $("#contentLoading").ajaxStop(function(r, s) {
        $(this).hide();
        $("#ready").show();
        working = false;
    });

    $('#form').submit(function() {
        if (working) return;
        $.post('/some/url', $(this).serialize(), function(data){
            alert(data);
        });
    });
});

答案 4 :(得分:1)

如果您完全控制javascript代码,则可以在每次启动ajax请求时递增变量,并在请求完成时递减它(成功,失败或超时)。这样,您始终可以知道是否有正在进行的请求。