基本上我想知道当整个文件完成下载时,jQuery 的 $.get() 方法的“成功函数”是否被触发。我怀疑是这样,但只是想确定一下。
我正在使用一系列 $.get() 请求来加载页面文件(CSS、javascript 等),同时显示“加载屏幕”。
在请求的每次成功回调中,我都会加载下一个文件,直到它们最终都完成,然后删除加载屏幕。
问题是随机的,通常在慢速连接时(网站是为移动浏览而设计的)加载屏幕会消失,但该网站的 CSS 直到大约 1-2 秒后才被应用,因此用户将看到一个没有样式的网站在将 CSS 应用于按钮等之前短暂停留。
这是我用来加载资源的代码
if(!window.MyResourceLoader) window.MyResourceLoader = {};
// list of resources to load
MyResourceLoader.MyResources = new Array(
"include/resources/.....css",
"include/resources/.....css",
"include/modules/.......js",
"include/...............js",
"include/...............js");
// reverse the array so we load it in the order above
MyResourceLoader.MyResources.reverse();
MyResourceLoader.resourcesToLoad = MyResourceLoader.MyResources.length;
/**
* Recursive function - loads the resources
*/
MyResourceLoader.loadMyResources = function()
{
// exit condition - stop recurring if we've run out of resources to load
if(this.MyResources.length < 1)
{
$(".meter > span").each(function() {
$(this).stop().animate({
width: "100%"
}, 300);
});
return;
}
// get the next resource to load
var resource = this.MyResources.pop();
// if the resource is a css file, append it to the head
if(resource.match(/css$/))
{
// append timestamp to resource
resource += ("?" + new Date().getTime());
// ie support
if(document.createStyleSheet)
document.createStyleSheet(resource);
else
$("head").append($('<link type="text/css" rel="stylesheet" href="' + resource + '">'));
// recusivley load resources
this.loadMyResources();
}
else if(resource.match(/\.js$/))
{
// append timestamp to resource
resource += ("?" + new Date().getTime());
// if the resource is a js file, make a request for it
$.get(resource, function()
{
// on successful request of the file, make another call to load resource
MyResourceLoader.loadMyResources();
});
}
}
最终的 javascript 文件是一个 'load end' .js 文件,它执行以下操作:
// fade out the loading screen
$('#webapp-loader').css('opacity',0);
setTimeout(function()
{
$('#webapp-loader').remove();
}, 1000);
如您所见,加载结束时甚至有 1 秒的缓冲区,然后才移除加载屏幕。