首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getScript创建ReferenceError

getScript创建ReferenceError
EN

Stack Overflow用户
提问于 2015-07-17 09:05:21
回答 1查看 694关注 0票数 4

在启动剩下的代码之前,我有一些js脚本加载到我的main.js中。然而,在测试过程中,我注意到,有时它会产生以下引用错误(每8个页面中就有1个)。

代码语言:javascript
复制
ReferenceError: createContainer is not defined

现在,我能想到得到这个错误的唯一原因是,当我执行startScript()函数时,并不是所有的文件都被加载或完全可访问。

现在,也许我把其他.js文件包含到我的main.js中是错误的,所以我想听听您对此的想法。

main.js看起来如下:

代码语言:javascript
复制
$(document).ready(function() {

    //sets and array of files that should be loaded before anything every happens
    var arrFilesToLoad = [  'scripts/global/variables.js',
                            'scripts/global/objects.js',
                            'scripts/global/classes.js'];
    var _error;

    //walks through the array of items that should be loaded and checks for fails
    $.each(arrFilesToLoad , function (key) {
        $.getScript(arrFilesToLoad[key])
            //when a file is loaded with succes
            .done(function () {
                //on default send a message to the console
                console.log(arrFilesToLoad[key] + 'loaded succesfully');
                //if every item is loaded start the script
                if(key == (arrFilesToLoad.length - 1)){
                    startScript();
                }
            })
            //when a file fails to load
            .fail(function () {
                //add the file that failed to load to a string message
                _error += arrFilesToLoad[key] + " - failed to load. \n";
                //show an alert with what file failed to load
                if(key == (arrFilesToLoad.length - 1)){
                    alert(_error);
                }
            });
    });

    function startScript () {
        //set a variable which contains a function that returns a DIV with styling
        var oContainer = createContainer();
        var oMainMenu = new Menu(arrMainMenu);
        $(oContainer).append(createMenu(oMainMenu));
        $('body').append(oContainer);
    }

});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-17 09:13:26

问题在于,您正在加载3个脚本,其中大概只有一个包含createContainer()函数,但是在加载最后一个请求时执行代码。这意味着你有比赛的条件。最后提出的请求不能保证是最后完成的请求。如果在完成最终请求时仍在加载其他脚本,您将看到此错误。

您可以修改您的逻辑,以便只执行所有脚本加载一次的回调。试试这个:

代码语言:javascript
复制
var requests = [];
$.each(arrFilesToLoad , function (key) {
    requests.push($.getScript(arrFilesToLoad[key]));
});

$.when.apply(this, requests)
    .done(startScript)
    .fail(function() {
        console.log('one or more scripts failed to load');
    });

function startScript() {
    var oContainer = createContainer();
    var oMainMenu = new Menu(arrMainMenu);
    $(oContainer).append(createMenu(oMainMenu));
    $('body').append(oContainer);
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31472088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档