Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态添加的javascript文件中存在访问函数_Javascript_Jquery_Html - Fatal编程技术网

动态添加的javascript文件中存在访问函数

动态添加的javascript文件中存在访问函数,javascript,jquery,html,Javascript,Jquery,Html,我正在添加一些javascript文件。然后我需要使用其中的函数。在firebug的Scripts选项卡中,我可以看到添加了脚本。函数LoadScript1Function出现在一个脚本中,而LoadScript2Function出现在另一个脚本中。 但我得到的错误是: `ReferenceError: LoadScript1Function is not defined` 这是我的密码: function LoadScripts(){ try{ var allScri

我正在添加一些javascript文件。然后我需要使用其中的函数。在firebug的
Scripts
选项卡中,我可以看到添加了脚本。函数
LoadScript1Function
出现在一个脚本中,而
LoadScript2Function
出现在另一个脚本中。 但我得到的错误是:

`ReferenceError: LoadScript1Function is not defined`
这是我的密码:

function LoadScripts(){
    try{
        var allScripts = document.getElementsByTagName('script');
        for (var x = 0; x < jsPaths.length; x++) {
            if($.inArray(jsPaths[x], allScripts) == -1){
                loadScript(jsPaths[x], null);
            } 
        }

        async(LoadScript1Function, function(){ ; });
        async(LoadScript2Function, function(){ ; });
    }
    catch(e){
        console.log(e);
    }
}

// Load script
function loadScript(url, callback){
    var script = document.createElement("script");
    script.type = "text/javascript";

    if (script.readyState){  //IE
        script.onreadystatechange = function(){
            if (script.readyState == "loaded" ||
                    script.readyState == "complete"){
                script.onreadystatechange = null;
                callback();
            }
        };
    } else {  //Others
        script.onload = function(){
            callback();
        };
    }

    script.src = url;
    document.getElementsByTagName("head")[0].appendChild(script);
}

// Async call
function async(fn, callback) {
    setTimeout(function() {
        fn();
        callback();
    }, 0);
}

我可以在您的
设置超时
调用中看到问题-超时为
0
。Javascript通常是单线程的,可以锁定浏览器的其他组件,因此0的超时不允许下载任何内容。您必须增加这些毫秒,并检查脚本是否已经可操作;如果没有,则计划一个新的超时。虽然我看不出异步函数首先需要什么

在类似的情况下,我喜欢做的是尝试访问由该对象提供的属性或函数,如果它失败,则再等待一段时间


关于回调,我不喜欢的是,您必须严格按照平台开发人员准备的方法进行操作,对灵活性的任何额外需求都会破坏整个代码。毕竟,将setTimeout用于所有内容可能会更好。然后,您可以快速处理“断开的连接”,更新任何跳动器/进度条等任何内容。

loadScript函数中有一个回调函数,用于在加载脚本时使用它,而不是传递null?@adeneo,请查看编辑。如果
LoadScript1Function
是全局定义的或附加到可从
窗口访问的内容上的,您的代码应该可以工作。仔细查看代码,我真的不明白吗?脚本标记已经在页面上,您使用getElementsByTagName获取它们,然后将它们传递给一个奇怪的loadScript函数,该函数会创建与您获取的相同的新脚本标记,所以现在您要将所有脚本加载两次?为什么要这样做?作为一个sidenote,jQuery有一个$.getScript方法,对您来说似乎很有用?
loadScript(jsPaths[x], function(){ 
     if(jsPaths[x].indexOf('Script1') != -1){ // script name check in the path
         LoadScript1Function();
     }
});