2012-03-16 118 views
7

我不知道如何可以編寫這個如何知道是否有任何AJAX請求和Ajax成功

注: 我不會在我的每一個Ajax請求功能連連代碼時。 我想要它Genric。所以,我的腳本知道是否有任何Ajax請求做$("#loader").css("display","block");,如果有任何阿賈克斯成功做$("#loader").css("display","none");

回答

8

你正在尋找的神奇之處jQuery.ajaxStart()jQuery.ajaxStop()。您可能還會發現jQuery.ajaxComplete()有用。

例子:

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

您應該使用的,而不是改變display CSS屬性hide()show()方法。

+0

沒有這樣的方法'ajaxEnd' – 2012-03-16 16:31:30

+0

@MartínCanaval:逮到過,謝謝! – 2012-03-16 16:33:29

+0

如果我有一個頁面中的兩個裝載機比? – 2012-03-22 14:59:07

3

看看$.ajaxStart$.ajaxEnd當你連線了在$ .document(準備好)你的應用程序:

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

UPDATE忘了ajaxStop ... // @科裏的答案提醒我。更新了我的答案。

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"); 
}; 
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

相關問題