用$.getScript()动态同步加载js——串行加载

页面的js要根据用途不同,选择动态加载压缩后代码,还是源码。
而不管是哪种,在各个js有相互依赖关系的时候,我们都希望他们能够按照顺序加载,如果异步执行,必然会导致加载完成的顺序错乱而发生页面加载错误。
太长不看版:使用递归,在$.getScript()回调处,调用自身,以达到在完成一个js加载之后再加载下一个的目的

假设,我们有一个对象,用于存放各种js路径

var jslist = {
    jslistDebug: [
        'third_lib/js/bootstrap.min.js',
        'third_lib/js/plugins/chosen/chosen.jquery.js',
        'third_lib/js/plugins/metisMenu/jquery.metisMenu.js',
        'third_lib/js/plugins/slimscroll/jquery.slimscroll.min.js',
    ],
    jslistNormal: ['1.1.0/js/test.min.js','1.1.0/js/end.min.js'],
};

假设,这些js只要加载完成的顺序发生变化,页面就会加载失败。
为了使用$.getScript()这个本质上是ajax请求的方法,我们先原生JavaScript加载jquery

(function () {
        var script = window.document.createElement('script');
        var jslistNormal = [],
            jslistDebug = [],
            inter;
        script.type = 'text/javascript';
        script.src = befHref + 'third_lib/js/jquery-2.1.1.js';
        document.getElementsByTagName('body')[0].appendChild(script);
        inter = setInterval(function () {
            if (typeof $ === 'function') {
                loadjs();
                clearInterval(inter);
            }
        }, 100);
    })();

嗯,就是说,只要设定一个定时器去判断jquery是否加载完,然后再使用这个方法就好。
下一步,编写loadjs()方法。

function loadjs() {
        var jslistNormal = [],
            jslistDebug = [];
        jslistNormal = window.jslist.jslistNormal;
        jslistDebug = window.jslist.jslistDebug;
        if (getQueryString('debug') == 1) {//调试模式
            loadDebug(jslistDebug, 0);
        } else {
            loadNormal(jslistNormal, 0);
        }

    }

这个loadjs(),是去判断到底该用哪个js路径的,下一步,就是重点了

function loadNormal(jslistNormal, n) {
        var length = jslistNormal.length;
        var jsSrc =  jslistNormal[n];
        if (n < length) {
            $.getScript(jsSrc, function () {
                n++;
                arguments.callee(jslistNormal, n);
            })
        } 
    }

这里用了递归,去遍历完整个list,因为是在$.getScript()的回调里,所以能够保证,在加载完一个js之后,才会加载另一个js。
至此,完成了串行动态加载js
END

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.几种基本数据类型?复杂数据类型?值类型和引用数据类型?堆栈数据结构? 基本数据类型:Undefined、Nul...
    伯纳乌的追风少年阅读 26,021评论 2 46
  • 在线阅读 http://interview.poetries.top[http://interview.poetr...
    前端进阶之旅阅读 115,195评论 24 450
  • 恩,确实浪过头了,连写作都没写。不过,也是需要的,这是第一次没有拖到不得不写的时候去写。今天的打算是,连写三篇。 ...
    随缘随笔阅读 4,200评论 0 0
  • 你们在同一时间出现 该欣喜还是失望 难得盼来一场雨 却和太阳谈起了恋爱 太阳一来 雨就羞羞涩涩 扭扭捏捏 像个小女...
    闺中风暖阅读 1,630评论 12 7
  • 我很平凡,却不想一生平庸。 只想未来让自己有路可走,有地可歇。
    栀苒阅读 1,562评论 0 1

友情链接更多精彩内容