jQuery:getScript将Javascript包含在Javascript中

时间:2013-11-07 09:35:18

标签: javascript jquery

我知道“将javascript文件包含到另一个javascript文件中”的主题已经讨论了很多。但我的情况略有不同,所以我找不到符合我问题的答案。

我们假设有三个文件:test.html,starter.js和object.js

test.html只使用jQuery包含starter.js:

<html>
  <head>
    <script src="js/starter.js"></script>
  </head>
  <body>
  <script src="jquery/jquery-1.9.1.js"></script>
    <script>
    $( document ).ready(function() {
        $.getScript("js/starter.js", loadobject());
        alert( "a" );
    });
   </script>
  </body>
</html>

starter.js包含一个$.getScript的函数,包含object.js,如下所示:

function loadobject() {
    alert( "b" );
    $.getScript("object.js", function(){
    Object.init();
    alert( "c" );
    });
}

最后,object.js包含如下对象:

var Object = {
init: function () {
            // . . .
},
searchString: function (data) {
            // . . .
    }
};
Object.init();

据我所知,当在浏览器中调用test.html时,一旦文档准备就应该包含starter.js。此外,starter.js应该在调用时加载object.js. 但这似乎失败了,因为行alert( "object loaded" );永远不会被执行。 我也经常试错,例如用$.getScript("object.js", function(){替换starter.js $.getScript("object.js", init(){中的行,但我找不到解决方案 - 虽然它可能很简单。 :(

如何解决此问题并正确包含包含对象的js文件? 另外,如何在starter.js中初始化和访问新的Object

我认为我搞砸了function(),但实际上我对此毫无头绪并欣赏任何提示。

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您按如下方式编写代码,则代码可以正常工作

<强> HTML

无需加载starter.js,因为您通过getScript函数完成了

<!DOCTYPE html>
<html>
    <head>
        <!--<script src="closure-library/closure/goog/base.js"></script>-->
        <!--<script src="js/starter.js"></script>-->
    </head>
    <body>
        <script type='text/javascript' src='http://code.jquery.com/jquery-1.9.1.js'></script>
        <script>
            $(document).ready(function() {
                $.getScript("js/starter.js", function(){
                    alert('starter loaded');
                    loadobject();
                });
                alert("a");
            });
        </script>
    </body>
</html>

<强> object.js

var theObject = {
    init: function() {
alert('init');
    },
    searchString: function(data) {

    }
};

<强> starter.js

指定绝对路径,在回调函数中,您可以按照假设访问对象。将Object重命名为theObject,因为在Object上调用函数会导致抛出jquery错误。

function loadobject() {
    alert( "b" );
    $.getScript("/test/js/object.js", function(){
    theObject.init();
    alert( "c" );
    });
}

您获得的结果是显示连续警报  “a”&gt; “起动器装载”&gt; “b”&gt; “init”&gt; “C”

答案 1 :(得分:0)

传递函数引用而不是函数的返回值。你在那里调用函数loadobject()并将返回的值传递给它。

  $.getScript("js/starter.js", loadobject);

 $.getScript("js/starter.js", function(){
     loadobject()
 });