异步Javascript未捕获TypeError:对象没有方法' test'

时间:2013-01-30 04:15:26

标签: javascript asynchronous

我正在尝试创建我的第一个异步加载的javascript文件,但之后无法从对象调用函数。下面是我的示例javascript文件exampletest.js ...

(function(){
    var example = {
        test : function () {
            alert("test function called");
        }
    };
    window.example = example;
})();

然后我尝试使用以下代码调用此文件。

    (function(doc, example) {
            window.example = example;

            var script = doc.createElement("script");
            script.type = "text/javascript";
            script.async = true;
            script.src = "http://www.example.com/exampletest.js";

            var scriptTag = doc.getElementsByTagName("script")[0];
            scriptTag.parentNode.insertBefore(script, scriptTag);
    })(document, window.example || []);

    example.test();

当我运行此脚本时,我收到错误“Uncaught TypeError:Object has no method'test'”

如果我在页面加载后调用该方法,比如点击链接,就会正确调用测试方法,我会收到警报框。

我一直在寻找更好地了解这一点,但到目前为止一直没有运气。我试图更好地理解如何在没有方法“测试”的情况下调用函数。有没有办法在javascript加载后推送函数调用而不会调用调用本身,所以它保持example.test();?

1 个答案:

答案 0 :(得分:-1)

在调用之前,只需检查该功能是否存在。

试试这个:

if (typeof example.test == function){
    example.test();
}

注意:由于JavaScript是异步加载的,window.onload将无效。

<强>更新

拥有async的全部目的是加载页面而不等待脚本加载。你不能兼得。

这不起作用

<script src="exampletest.js"  async ></script>

<script type="text/javascript">
    example.test();
</script>

但这会起作用,因为执行等待加载文件

<script src="exampletest.js" ></script>

<script type="text/javascript">
    example.test();
</script>