javascript - jQuery getScript

标签 javascript jquery getscript

我目前无法使用必须以非常特定的顺序加载的几个 JavaScript 库。由于 jQuery 的 getScript() 是异步的,它会非常快速地开始下载所有脚本,并在它们完成后执行它们。由于它们没有按顺序执行,因此我从库中收到多个错误。

不幸的是,我无法更改或修改这些库中的任何一个。我试图做的是使用一种方法来下载 JavaScript 库,并在回调中让它调用自身,直到它完成所有库的加载。

这适用于第一个文件。当第二个文件出现时,它失去了回调内部的上下文,我不能再调用我的递归方法。

有什么想法吗?

代码的配对版本:

function loadFiles (CompletedCallback) {
    var Files = getFiles(); // This is an array of js files to load
    var currentFileIndex = 0;

    function processFile (file) {
        $.getScript(file[currentFileIndex], $.proxy(function () {
            ++currentFileIndex;
            if (currentFileIndex === Files.length) {
                CompletedCallback();
            } else {
                processFile(Files[currentFileIndex]);
            }
        }, this);
    };

    processFile(Files[currentFileIndex]);
};

最佳答案

我不确定你的代码有什么问题,但我会这样做:

function loadOrdered(files, callback) {
   $.getScript(files.shift(), function() {
       files.length
          ? loadOrdered(files, callback)
          : callback();
   });
}

编辑,更好的版本:

function loadOrdered(files, callback) {
   $.getScript(files.shift(), files.length
       ? function(){loadOrdered(files, callback);}
       : callback
   );
}

甚至更好,如果您不关心旧浏览器或自己实现 Function.prototype.bind(也支持绑定(bind)参数,而不仅仅是 this 上下文):

function loadOrdered(files, callback) {
   $.getScript(files.shift(), files.length
       ? loadOrdered.bind(null, files, callback)
       : callback
   );
}

关于javascript - jQuery getScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7083550/

相关文章:

javascript - Passport.js:使用主干时访问用户

参数化查询中的 JavaScript 错误

javascript - 修改父构造函数不会影响子构造函数

javascript - 检测同一个类中的哪个元素被点击并显示div

javascript - 在 Javascript 中动态创建 HTML 内容的替代解决方案

javascript - .load 和 .getScript 之后的 jQuery 绑定(bind)仅在警报之后有效

javascript - React Router 不编码 & 符号,而是对路径参数中的空格进行编码

php - 使用ajax上传文件codeigniter

javascript - jQuery getScript 与在文件中嵌入脚本

javascript - 我可以阻止 history.popstate 在初始页面加载时触发吗?