如何知道是否有任何Ajax请求和ajax成功

时间:2012-03-16 16:25:05

标签: javascript jquery javascript-events

我想知道如何编码

//if there is any ajax request
   $("#loader").css("display","block");
//on success:
    $("#loader").css("display","none");

注意: 我不打算在我的每个ajax请求函数中反复编码。 我想要它Genric。以便我的脚本知道是否有任何ajax请求执行$("#loader").css("display","block");并且如果有任何ajax成功请$("#loader").css("display","none");

4 个答案:

答案 0 :(得分:8)

您正在寻找的神奇之物是jQuery.ajaxStart()jQuery.ajaxStop()。您可能还会发现jQuery.ajaxComplete()有用。

示例:

$("#loader").ajaxStart(function() {
   $(this).show();
}).ajaxStop(function() {
   $(this).hide();
});

您应该使用hide()show()方法,而不是更改display CSS属性。

答案 1 :(得分:3)

在$ .document(准备好)中连接您的应用时,请查看$.ajaxStart$.ajaxEnd

$.ajaxStart(function(){
  $("#loader").css("display", "block");
})
.ajaxStop(function(){
  $("#loader").css("display", "none");
});

更新忘记了ajaxStop ...... @Cory的回答让我想起了。更新了我的答案。

答案 2 :(得分:2)

这些其他解决方案很棒,但我不确定它们是否可以解决您在开始成功上调用$("#loader") CSS更改的问题。

可能是这样的:

$(document).ajaxStart(function() {

  // do something on start
  $("#loader").css("display","block");

}).ajaxError(function(e, xhr, settings) {
  // do something on error
  $("#loader").css("display","none");

}).ajaxSuccess(function() {

  // do something on success
  $("#loader").css("display","block");

});

查看这个正常运作的示例:http://jsbin.com/ocovoq/3/edit#preview

答案 3 :(得分:1)

如果您关闭两个或三个ajax调用,ajaxStop只会在最后一个调用时触发。

var isMakingAjaxCall;

$(document).ready(function () {

    // Loading Screen for Ajax Calls
    $("#loader").hide();
    $("#loader").ajaxStart(function () {
        isMakingAjaxCall = true;
        RepositionLoading();
        $("#loader").fadeIn();
    });
    $("#loader").ajaxStop(function () {
        $("#loader").fadeOut();
        isMakingAjaxCall = false;
    });
});

function RepositionLoading() {
    $("#loader").css('left', "20px");
    $("#loader").css('top', "20px");
};