在Google Chrome浏览器中,AJAX在$(function(){....})内调用;似乎可以保持页面加载。
我的网站上有几个带有标签的页面。因为我使用的是廉价的Godaddy托管,所以我希望页面尽快加载。因此,我想在1个标签上加载页面,然后在后台使用AJAX加载其他标签。当我从运行AJAX
$(function(){ /*AJAX CODE HERE */ });
光标显示页面已长时间加载(http://jsfiddle.net/mazlix/7fDYE/9/)
我想出了一种方法(使用ChromeAtleast),可以使用setTimeout();(http://jsfiddle.net/mazlix/7fDYE/8/)进行某种程度的修复,但这仅在您正确预测窗口何时完全加载完毕并明显使加载时间更长。我想要一种在页面加载后立即通过AJAX加载内容的方法,因此在等待返回的AJAX时不会显示“忙光标”。
setTimeout();
只要没有对服务器的新查询,Google Chrome就会显示“加载指示器”。显示加载指示符时,所有新请求都导致Chrome延长显示指示符的时间。此外,在esc显示指示器时按时,所有请求都将中止!这些包括AJAX请求,甚至Flash请求!:我以为是YouTube造成的,但这变成了Chrome的惯常行为。
esc
避免“延长”显示Loading指示符时间的唯一方法 是在隐藏loading指示符之后 发出请求:即,对服务器的所有查询完成时。JQuery的文档上.load()说:
.load()
当加载事件和所有子元素都已完全加载时,会将加载事件发送到该元素。该事件可以发送到与URL关联的任何元素:图像,脚本,框架,iframe和window对象。
window.load()
setTimeout()
如果在请求 之前 还有其他请求,则应等待它们完成!例如,您知道除了图像/脚本等之外,在页面加载之前还有3个AJAX请求。你可以有这样的事情:
var loaded=0,needsToBeLoaded=4; //3 AJAX + window function onLoad(){ loaded++; if(loaded==needsToBeLoaded){ //do the AJAX request } } window.load(onLoad); // add onLoad() to all 3 AJAX request handlers
我不确定您可以如何处理Flash请求…