2 a86356 a86356 于 2015.06.23 13:55 提问

异步加载js的问题,为什么能异步加载

这是高性能js的一个例子,为什么没有设置async属性为true就能实现异步下载?

 var script = document.createElement ("script");
script.type = "text/javascript";
script.src = "file1.js";
document.getElementsByTagName_r("head")[0].appendChild(script);

2个回答

danielinbiti
danielinbiti   Ds   Rxr 2015.06.23 14:10

这是script标签,不是ajax,它的异步和同步不是相对于代码执行,而是对于文档解析来说。
加载file1.js是否完成,最终都是通过回调的方式通知。
另外async这是html5的特性,以前版本是没有的

bulusli3
bulusli3   Ds   Rxr 2015.06.23 15:24
以下是一个监听页面加载script的例子。页面通过load或者onreadystate这个方法来监听script是否加载完成,可以体会 一下这个方法。
    _load: function (path, callback) {
        try {
            var script = document.createElement('script');

            script.src = path;
            script.type = "text/javascript";

            document.getElementsByTagName("head")[0].appendChild(script);

            if (script.addEventListener) {
                script.addEventListener("load", callback, false);
            } else if (script.attachEvent) {
                script.attachEvent("onreadystatechange", function () {
                    if (script.readyState == 4 || script.readyState == 'complete' || script.readyState == 'loaded') {
                        callback();

                    }
                });
            }
        } catch (e) {
            console.log(e);
        }
    }
Csdn user default icon
上传中...
上传图片
插入图片