在js文件中加载javascript文件。哪种方法可以检查是否所有文件都已加载?

时间:2013-10-25 05:02:55

标签: javascript ajax jquery loading

我有一个数组,我在调用特定脚本之前指定了我需要在javascript中加载的文件。让我们将这些特定的代码行称为myscript

我做了如下

var fileNamesArray = new Array();
    fileNamesArray.push("abc.js");
    fileNamesArray.push("pqr.js");
    fileNamesArray.push("xyz.js");
    fileNamesArray.push("klm.js");

    var totalFiles = jQuery(fileNamesArray).length;
    var tempCount = 0;

    jQuery.each(fileNamesArray, function(key, value) {
        jQuery.getScript(value, function() {
            tempCount++;
        });
    });

检查是否所有文件都被加载,我做了以下事情,但似乎没有效果

var refreshIntervalId = setInterval(function() {
        if (tempCount == totalFiles) {
            clearInterval(refreshIntervalId);
            return;
        }
    }, 10);

我已经在面向对象的javascript中实现了这些,如下所示

function Loader() {

    this.jQuery = null;

    // check for specifically jQuery 1.8.2+, if not, load it

    if (jQuery == undefined) {
        jQuery.getScript(
                "/Common/javascript/jquery/map/javascript/jquery-1.8.2.js",
                function() {
                    this.jQuery = jQuery.noConflict();
                });
    } else {
        var jQueryVersion = $.fn.jquery;

        jQueryVersion = parseInt(jQueryVersion.split('.').join(""));

        if (182 > jQueryVersion) {
            jQuery.getScript(
                    "/Common/javascript/jquery/map/javascript/jquery-1.8.2.js",
                    function() {
                        this.jQuery = jQuery.noConflict();
                    });
        }
    }
}

Loader.prototype.LoadAllFile = function() {
//here i am loading all files
}

Loader.prototype.bindMap = function(options) {
this.LoadAllFile();
//execute the script after loading the files... which we called as myscript
}

我通过ajax加载超过12-14个js文件。

如果您观察Loader.prototype.bindMap,我首先加载所有文件,然后执行脚本。

但似乎myscript脚本在加载所有文件之前开始执行。

只有在加载了所有js文件后才能执行脚本的更好方法。

2 个答案:

答案 0 :(得分:0)

看一下jQuery的.load()http://api.jquery.com/load-event/

$('script').load(function () { }); 

答案 1 :(得分:0)

基于Jquery.getScript的文档,它是Jquery.ajax的简写。默认情况下,这在异步调用中。您可能希望将其更改为执行同步调用。 要设置此属性,您可以参考this

因此,您可以在数组中循环并执行Jquery.getScript,而不是执行setInterval。