我目前正在使用以下代码为我的 ajax 调用使用预加载器 gif:
$(document).ajaxStart(function () {
var position = $('#parentDiv').position();
position.left += (($('#parentDiv').width() / 2) - ($('#bigPreloader').width() / 2));
position.top += (($('#parentDiv').height() / 2) - ($('#bigPreloader').height() / 2));
$('#bigPreloader').css(position).show();
$('#bigPreloader').show();
}).ajaxStop(function () {
$('#bigPreloader').hide();
});
在上面的代码中,#parentDiv 占据了页面的大部分,并且预加载器是 250x250 像素并以 #parentDiv 为中心。
这很好用,但我刚刚添加了一些与特定输入相关联的额外 ajax 调用,而不是整个页面。我有一个小型预加载器(14x14 像素),我计划将其放入适当的输入本身。
ajaxStart 内部有没有办法确定进行了哪个 ajax 调用?或者有没有办法让多个 ajaxStarts 链接到特定元素?
解决方案
$(document).ajaxSend(function (event, jqxhr, settings) {
if (settings.url.indexOf('LoadInputData') == -1) {
var position = $('#parentDiv').position();
position.left += (($('#parentDiv').width() / 2) - ($('#bigPreloader').width() / 2));
position.top += (($('#parentDiv').height() / 2) - ($('#bigPreloader').height() / 2));
$('#bigPreloader').css(position).show();
$('#bigPreloader').show();
} else {
$('#inputLoad').removeClass('notActive').addClass('isActive');
}
}).ajaxStop(function () {
if ($('#bigPreloader').is(':visible')) {
$('#bigPreloader').hide();
} else {
$('#inputLoad').removeClass('isActive').addClass('notActive');
}
});