在ajax调用上显示*浏览器*加载指示符(如发生回发时)

时间:2012-02-16 16:09:57

标签: ajax browser xmlhttprequest loading

示例:转到您的Facebook墙,滚动页面末尾,Facebook将加载更多墙信息异步。或者只需点击墙贴中的图像即可。图像对话框(带有注释和更大的图像)也正在加载异步。 (您可以使用firebug查看GET请求)。

但是通过查看和firefox选项卡,您可以看到加载指示器,就像发生回发一样。

我知道这可以通过使用IFrame并更改其src来实现。就像iGoogle所做的一样。但我不确定Facebook是否使用IFrame来加载额外的墙贴。还有另一种方法来实现这一目标吗?

更新:通过说“加载指标”我并不是指ajax指标 正如我所提到的浏览器指示器(显示我们页面是否正在加载的选项卡的一侧)更改为加载,就像它是一个回发。

3 个答案:

答案 0 :(得分:6)

不是AFAIK。 我的猜测是他们可能将IFrame src设置为ajax方法,并在加载时将内容移动到div(或其他元素)。

答案 1 :(得分:6)

可以使用iframe完成。简而言之,您附加了一个隐藏的iframe:

var $loadingIndicator = $('<iframe src="/loading/" class="visuallyhidden">');
$loadingIndicator.appendTo('body');

它必须加载一个停止,永不加载的页面。可能在网站自己的域上,因为浏览器实际上在状态栏中显示waiting for domainname.com

在文件domainname.com/loading/index.php中输入:

<?php sleep(100);

完成后删除iframe:

$loadingIndicator.remove();

考虑到这实际上是一个额外的请求,这并不理想。原因如下:

  • 您的服务器会有长时间的请求,可能会对性能产生影响
  • 浏览器将使用少数可用的并发连接之一,因此可能会减慢正在加载的任何内容
  • 在我的案例中使动画断断续续(Chrome 27 / OSX,requestAnimationFrame)。

通过Slow-loading technique
 通过https://stackoverflow.com/a/3145840/288906

答案 2 :(得分:3)

我创建了一个基于jQuery的库来处理这个问题,在某些情况下(同源)应该是一个可行的解决方案,并成功触发某些桌面浏览器中的繁忙指标(至少现代Chrome和Firefox,奇怪的是,IE8但是可能不是IE9,绝对不是Safari或大多数移动浏览器。)

Noisy JSON

基本上,我使用iframe方法来触发&#34;忙碌&#34;指标,但没有人为地打击一个单独的&#34;停滞&#34; page:相反,它只是使用自定义$ .ajaxTransport来传递隐藏的iframe,然后将json响应解析出来。结果是浏览器显示与您正在进行的请求直接相关的加载指示:没有额外的http请求。您基本上只需安装插件然后决定哪些ajax请求应该是有噪声的,哪些不应该只是通过更改dataType参数。

作为旁注,在iframes中加载内容DOESN&t; T触发Safari和IE9中用户的任何UI反馈只是奇怪的