示例:转到您的Facebook墙,滚动页面末尾,Facebook将加载更多墙信息异步。或者只需点击墙贴中的图像即可。图像对话框(带有注释和更大的图像)也正在加载异步。 (您可以使用firebug查看GET请求)。
但是通过查看和firefox选项卡,您可以看到加载指示器,就像发生回发一样。
我知道这可以通过使用IFrame
并更改其src来实现。就像iGoogle所做的一样。但我不确定Facebook是否使用IFrame来加载额外的墙贴。还有另一种方法来实现这一目标吗?
更新:通过说“加载指标”我并不是指ajax指标 正如我所提到的浏览器指示器(显示我们页面是否正在加载的选项卡的一侧)更改为加载,就像它是一个回发。
答案 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();
考虑到这实际上是一个额外的请求,这并不理想。原因如下:
通过Slow-loading technique
通过https://stackoverflow.com/a/3145840/288906
答案 2 :(得分:3)
我创建了一个基于jQuery的库来处理这个问题,在某些情况下(同源)应该是一个可行的解决方案,并成功触发某些桌面浏览器中的繁忙指标(至少现代Chrome和Firefox,奇怪的是,IE8但是可能不是IE9,绝对不是Safari或大多数移动浏览器。)
基本上,我使用iframe方法来触发&#34;忙碌&#34;指标,但没有人为地打击一个单独的&#34;停滞&#34; page:相反,它只是使用自定义$ .ajaxTransport来传递隐藏的iframe,然后将json响应解析出来。结果是浏览器显示与您正在进行的请求直接相关的加载指示:没有额外的http请求。您基本上只需安装插件然后决定哪些ajax请求应该是有噪声的,哪些不应该只是通过更改dataType参数。
作为旁注,在iframes中加载内容DOESN&t; T触发Safari和IE9中用户的任何UI反馈只是奇怪的。