代码之家  ›  专栏  ›  技术社区  ›  RobertPitt

循环后的javascript回调

  •  1
  • RobertPitt  · 技术社区  · 14 年前

    我刚刚开始了一个新的Wordpress博客,我已经开始建立JavaScript基础了!

    这是我的密码!

    var Utilities = {
        Log : function(item)
        {
            if(console && typeof console.log == 'function')
            {
                //Chrome
                console.log(item);
            }
        },
        LoadLibraries : function(callback)
        {
            $.each(Wordpress.required,function(i,val){
                //Load the JS
                $.getScript(Wordpress.theme_root + '/js/plugins/' + val + '/' + val + '.js',function(){ //  %/js/plugins/%/%.js
                    Utilities.Log('library Loaded: ' + val);
                });
            });
            callback();
        }
    }
    

    用法是这样的!

    Utilities.LoadLibraries(function(){
        Utilities.Log('All loaded');
    });
    

    上面你看到了 callback() 在文件进入dom之前正在执行witch!我需要在每个图书馆的收纳结束时打电话!

    1 回复  |  直到 11 年前
        1
  •  1
  •   Andy E    14 年前

    $.getScript() 是一个异步调用,因此javascript代码将继续执行,直到调用完成。你已经知道了, $.getScript() 还接受回调函数作为 success 参数,该参数将在异步调用完成时执行。您必须围绕该参数来解决问题,可能的方法是从数组中删除脚本,然后检查该数组是否为空。

        $.each(Wordpress.required,function(i,val){
            //Load the JS
            $.getScript(Wordpress.theme_root + '/js/plugins/' + val + '/' + val + '.js',function(){ //  %/js/plugins/%/%.js
                Utilities.Log('library Loaded: ' + val);
    
                // Remove the completed item
                delete WordPress.required[i];
    
                // If array is empty, all scripts loaded - execute callback!
                if (!Wordpress.required.length)
                    callback();              
            });
        });