0

我有一个数组,我在其中指定了在调用特定脚本之前需要在 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 文件后执行脚本的更好方法是什么。

4

2 回答 2

0

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

$('script').load(function () { }); 
于 2013-10-25T05:11:19.210 回答
0

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

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

于 2013-10-25T05:12:09.203 回答