页面加载时Chrome AJAX会导致"忙碌光标"保留

maz*_*lix 13 javascript ajax jquery google-chrome loading

在Google Chrome中,AJAX在$(function(){....})内调用; 似乎保持页面加载.

我有一个带有几个标签页面的网站.因为我使用廉价的godaddy托管,我希望页面加载尽可能快.因此,我想在1个选项卡上加载页面,然后在后台使用AJAX加载其他选项卡.当我从中运行AJAX时

$(function(){
    /*AJAX CODE HERE */
});
Run Code Online (Sandbox Code Playgroud)

光标显示页面长时间加载(http://jsfiddle.net/mazlix/7fDYE/9/)

我已经找到了一种方法(至少使用chrome)来解决这个问题setTimeout();(http://jsfiddle.net/mazlix/7fDYE/8/),但这只有在你正确预测窗口何时完全加载并且显然使得加载需要更长的时间.我想要一种在页面加载后立即通过AJAX加载内容的方法,因此在等待返回的AJAX时不会显示"busy-cursor".

Hra*_*ian 8

只要没有对服务器的新查询,Google Chrome就会显示"加载指标".显示加载指示符时,所有新请求都会导致Chrome延长指示符显示的时间.此外,在esc显示指示器时按下时,所有请求都将中止!这些包括AJAX请求甚至Flash请求!看看这个问题:我认为这是因为Youtube,但它变成了Chrome的惯常行为.

避免"延长"加载指示器的时间的唯一方法是在加载指示器被隐藏之后进行请求:即,当完成对服务器的所有查询时.JQuery的文件.load()说:

当load和所有子元素已完全加载时,load事件将发送到元素.此事件可以发送到与URL关联的任何元素:图像,脚本,框架,iframe和窗口对象.

因此,如果您确定页面上只有图像,脚本和框架,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
Run Code Online (Sandbox Code Playgroud)

我不确定你可以用Flash请求做什么...