通过jQuery追加脚本时我需要setTimeout吗?

时间:2014-05-08 10:37:44

标签: javascript jquery

我需要调用一个在jQuery append方法中包含的javascript文件中声明的函数:

var s = document.createElement("script");
s.type = "text/javascript";
s.src = scriptUrl;
jQuery("head").append(s); 

setTimeout(function(){ 
  jQuery('.divClass').banner({
      duration: 2000
  }); 
},100);

我在考虑加载脚本时可能会遇到问题,这会比setTimeout中设置的时间长。

如果脚本包含在带有<script>标记的html中,那么浏览器会等到脚本加载完毕。但是,如果我使用jQuery append()方法包含脚本,情况是否相同?在这种情况下我需要setTimeout吗?我如何计算所需的时间?

2 个答案:

答案 0 :(得分:2)

使用JQuery的getScript方法:

$.getScript( "ajax/test.js", function( data, textStatus, jqxhr ) {
    console.log( data ); // Data returned
    console.log( textStatus ); // Success
    console.log( jqxhr.status ); // 200
    console.log( "Load was performed." );
});

或原生(取自http://www.nczonline.net/blog/2009/07/28/the-best-way-to-load-external-javascript/):

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);
}

答案 1 :(得分:0)

否则,您可以使用jQuery.getScript()。虽然它是异步的。