在Prototype中,我可以使用以下代码显示"loading ..."图像:
var myAjax = new Ajax.Request( url, {method: 'get', parameters: pars, onLoading: showLoad, onComplete: showResponse} ); function showLoad () { ... }
在jQuery中,我可以将服务器页面加载到一个元素中:
$('#message').load('index.php?pg=ajaxFlashcard');
但是如何像在Prototype中那样将加载微调器附加到此命令?
有几种方法.我首选的方法是将一个函数附加到元素本身的ajaxStart/Stop事件上.
$('#loadingDiv') .hide() // Hide it initially .ajaxStart(function() { $(this).show(); }) .ajaxStop(function() { $(this).hide(); }) ;
无论何时进行任何Ajax调用,都会触发ajaxStart/Stop函数.
更新:从jQuery 1.8开始,文档说明.ajaxStart/Stop
应该只附加到document
.这会将上面的代码段转换为:
var $loading = $('#loadingDiv').hide(); $(document) .ajaxStart(function () { $loading.show(); }) .ajaxStop(function () { $loading.hide(); });
对于我使用的jQuery
jQuery.ajaxSetup({ beforeSend: function() { $('#loader').show(); }, complete: function(){ $('#loader').hide(); }, success: function() {} });
您可以使用jQuery的.ajax
函数并使用它的选项beforeSend
并定义一些函数,您可以在其中显示类似于装载器div的内容,并且在成功选项中您可以隐藏该装载器div.
jQuery.ajax({ type: "POST", url: 'YOU_URL_TO_WHICH_DATA_SEND', data:'YOUR_DATA_TO_SEND', beforeSend: function() { $("#loaderDiv").show(); }, success: function(data) { $("#loaderDiv").hide(); } });
你可以拥有任何Spinning Gif图像.根据您的配色方案,这是一个很棒的AJAX Loader Generator网站:http://ajaxload.info/
您可以在AJAX调用之前将动画图像插入到DOM中,并执行内联函数以将其删除...
$("#myDiv").html(''); $('#message').load('index.php?pg=ajaxFlashcard', null, function() { $("#myDiv").html(''); });
这将确保您的动画在后续请求的同一帧开始(如果这很重要).请注意,旧版本的IE 可能会遇到动画问题.
祝好运!
$('#message').load('index.php?pg=ajaxFlashcard', null, showResponse); showLoad(); function showResponse() { hideLoad(); ... }
http://docs.jquery.com/Ajax/load#urldatacallback
如果你正在使用$.ajax()
你可以使用这样的东西:
$.ajax({ url: "destination url", success: sdialog, error: edialog, // shows the loader element before sending. beforeSend: function () { $("#imgSpinner1").show(); }, // hides the loader after completion of request, whether successfull or failor. complete: function () { $("#imgSpinner1").hide(); }, type: 'POST', dataType: 'json' });
使用加载插件:http: //plugins.jquery.com/project/loading
$.loading.onAjax({img:'loading.gif'});
变体:我在主页的左上角有一个id ="logo"的图标; 然后当ajax工作时,将旋转器gif覆盖在顶部(带透明度).
jQuery.ajaxSetup({ beforeSend: function() { $('#logo').css('background', 'url(images/ajax-loader.gif) no-repeat') }, complete: function(){ $('#logo').css('background', 'none') }, success: function() {} });
我最后对原始回复进行了两处更改.
从jQuery 1.8开始,只应附加ajaxStart和ajaxStop document
.这使得仅过滤一些ajax请求变得更加困难.秀...
切换到ajaxSend和ajaxComplete可以在显示微调器之前查看当前的ajax请求.
这是这些更改后的代码:
$(document) .hide() // hide it initially .ajaxSend(function(event, jqxhr, settings) { if (settings.url !== "ajax/request.php") return; $(".spinner").show(); }) .ajaxComplete(function(event, jqxhr, settings) { if (settings.url !== "ajax/request.php") return; $(".spinner").hide(); })
您可以简单地将加载程序映像分配给稍后将使用Ajax调用加载内容的同一标记:
$("#message").html('Loading...');
$('#message').load('index.php?pg=ajaxFlashcard');
您还可以使用图像标记替换span标记.
我也想为这个答案做出贡献.我在jQuery中寻找类似的东西,这也是我最终使用的东西.
我从http://ajaxload.info/获得了我的加载微调器.我的解决方案基于http://christierney.com/2011/03/23/global-ajax-loading-spinners/上的这个简单答案.
基本上你的HTML标记和CSS看起来像这样:
然后你的jQuery代码看起来像这样:
它是如此简单 :)
除了为ajax事件设置全局默认值之外,您还可以设置特定元素的行为.也许只是改变他们的课程就足够了?
$('#myForm').ajaxSend( function() { $(this).addClass('loading'); }); $('#myForm').ajaxComplete( function(){ $(this).removeClass('loading'); });
CSS示例,用spinner隐藏#myForm:
.loading { display: block; background: url(spinner.gif) no-repeat center middle; width: 124px; height: 124px; margin: 0 auto; } /* Hide all the children of the 'loading' element */ .loading * { display: none; }