我不知道如何可以編寫這個如何知道是否有任何AJAX請求和Ajax成功
注: 我不會在我的每一個Ajax請求功能連連代碼時。 我想要它Genric。所以,我的腳本知道是否有任何Ajax請求做$("#loader").css("display","block");
,如果有任何阿賈克斯成功做$("#loader").css("display","none");
我不知道如何可以編寫這個如何知道是否有任何AJAX請求和Ajax成功
注: 我不會在我的每一個Ajax請求功能連連代碼時。 我想要它Genric。所以,我的腳本知道是否有任何Ajax請求做$("#loader").css("display","block");
,如果有任何阿賈克斯成功做$("#loader").css("display","none");
你正在尋找的神奇之處jQuery.ajaxStart()和jQuery.ajaxStop()。您可能還會發現jQuery.ajaxComplete()有用。
例子:
$("#loader").ajaxStart(function() {
$(this).show();
}).ajaxStop(function() {
$(this).hide();
});
您應該使用的,而不是改變display
CSS屬性hide()
和show()
方法。
看看$.ajaxStart
和$.ajaxEnd
當你連線了在$ .document(準備好)你的應用程序:
$.ajaxStart(function(){
$("#loader").css("display", "block");
})
.ajaxStop(function(){
$("#loader").css("display", "none");
});
UPDATE忘了ajaxStop ... // @科裏的答案提醒我。更新了我的答案。
如果你發射了兩個或三個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");
};
這些其他的解決方案是偉大的,但我不知道他們解決您的呼籲開始和成功您$("#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
沒有這樣的方法'ajaxEnd' – 2012-03-16 16:31:30
@MartínCanaval:逮到過,謝謝! – 2012-03-16 16:33:29
如果我有一個頁面中的兩個裝載機比? – 2012-03-22 14:59:07