jquery append一个js文件,如何在载入完成执行回调?


$('body').append('<script src="xxx.js"></script><script src="yyy.js"></script>');
这样子载入一个js,有没有办法在载入完成时执行一个回调函数。

jquery Ajax callback JavaScript

宁静的哈哈哈 9 years, 9 months ago

 function loadScript(url, callback) {
    var script = document.createElement("script");
    script.type = "text/javascript";
    // IE
    if (script.readyState) {
        script.onreadystatechange = function () {
            if (script.readyState == "loaded" || script.readyState == "complete") {
                script.onreadystatechange = null;
                callback();
            }
        };
    } else { // others
        script.onload = function () {
            callback();
        };
    }
    script.src = url;
    document.body.appendChild(script);
}

使用:


 loadScript("http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js", function () {
    alert('loaded');
});

JSFiddle例子:
http://jsfiddle.net/starandtina/L3QaM/

cao1118 answered 9 years, 9 months ago

为什么不 $.getScript


 $.getScript("/do.js",function(){
    console.log("加载完毕");
})

加点料...
jQuery.getScript(url,success(response,status))
载入的脚本在全局环境中执行,因此能够引用其他变量,并使用 jQuery 函数。
该函数是简写的 Ajax 函数,等价于:


 $.ajax({
  url: url,
  dataType: "script",
  success: success
});

冷面小瓜子 answered 9 years, 9 months ago

试了这样


 $('body').on('load', function(){
        alert('xx');
    }).append('<script src="xxx.js"></script><script src="yyy.js"></script>');

不行。。。

这样子可以。。。


 var $jsArr = $('<script src="xxx.js"></script><script src="yyy.js"></script>');
var len = $jsArr.length-1;
$jsArr.each(function(i) {
    $.getScript(this.src, function(){
        if (len===i) {
            alert('xxx');
        }
    });
});

不知道 有没有更好的方法

谷歌搜索颜白虎 answered 9 years, 9 months ago

Your Answer