小编典典

页面加载时的Chrome AJAX导致“忙光标”保留

ajax

在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时不会显示“忙光标”。


阅读 245

收藏
2020-07-26

共1个答案

小编典典

只要没有对服务器的新查询,Google
Chrome就会显示“加载指示器”。显示加载指示符时,所有新请求都导致Chrome延长显示指示符的时间。此外,在esc显示指示器时按时,所有请求都将中止!这些包括AJAX请求,甚至Flash请求!:我以为是YouTube造成的,但这变成了Chrome的惯常行为。

避免“延长”显示Loading指示符时间的唯一方法 是在隐藏loading指示符之后
发出请求:即,对服务器的所有查询完成时。JQuery的文档.load()说:

当加载事件和所有子元素都已完全加载时,会将加载事件发送到该元素。该事件可以发送到与URL关联的任何元素:图像,脚本,框架,iframe和window对象。

因此,如果您确定页面上只有图像,脚本和框架,window.load()则会在需要时将其触发。添加setTimeout()到它可以根据需要工作。这是一个示例:http
//jsfiddle.net/7fDYE/22/

如果在请求 之前 还有其他请求,则应等待它们完成!例如,您知道除了图像/脚本等之外,在页面加载之前还有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请求…

2020-07-26