文件未正确加载

时间:2014-07-21 14:44:10

标签: javascript jquery html

大家下午好!我在网上搜索解决了这个问题并试图实现我能看到的解决方案,但我偶尔会遇到问题......

该项目采用模块化设计,每个模块都有.html,.js和.css文件。在加载模块时,检查那些相关文件,如果它们已经存在于DOM中(例如,模块已经至少打开过一次),则没有问题。如果文件尚未加载(例如模块尚未加载),则偶尔会遇到调用javascript函数的问题,但外部.js文件还没有被加载装了。以下是负责处理此问题的函数:

function loadFile(sType,sURI,sCallback) {
// sType    the type of file to load: link, script
// sURI the URI of the file to load
// sCallback    the code to execute after successfully loading the file
var ref = document.createElement(sType);

if (sType == 'script') {
   ref.setAttribute("type","text/javascript");
   ref.setAttribute("src",sURI);
} else  if (sType == 'link') {
   ref.setAttribute("rel","stylesheet");
   ref.setAttribute("type","text/css");
   ref.setAttribute("href",sURI);
}

ref.async = true;
ref.onreadystatechange = ref.onload = function() {
   var state = ref.readyState;
   if (! sCallback.done && (! state || /loaded|complete/.test(state))) {
    sCallback.done = true;

    if (typeof(sCallback) === 'function') {
       callback();
    } else {
       eval(sCallback);
    }
  }
};

document.getElementsByTagName('head')[0].appendChild(ref);
}

还有其他一些SO文章用于上述功能:

Dynamically load external javascript file, and wait for it to load - without using JQuery

Javascript check if function exists

因此上面的函数将被调用为:

loadFile('link',"module.css?cache=0", $("#divModule").hide().load("module.php?action=init").fadeIn('slow'));
loadFile('script',"module.js?cache=0", "initModule('req')");

第一个调用将在.css文件下载后加载模块的.html文件内容(通过module.php调用)。第二次调用将在.js文件下载后调用模块js init函数。

它似乎没有与.css文件有任何问题,但有时模块将无法正确加载意味着布局正确呈现,但没有填充值(这是模块js init发生的情况)功能)。如果我查看“Web控制台”'在FF中,没有任何错误被抛出。有什么想法吗?

谢谢, 戴夫

1 个答案:

答案 0 :(得分:0)

很难说我没有看到那个module.php代码中发生了什么,但它看起来像你的第一个至少是立即触发,而不是作为回调。除非我遗漏了某些东西,否则回调应该是一个函数,而现在你实际上正在执行jquery隐藏/加载东西,当你调用loadfile时。您可能希望将其包装在函数中。