未定义函数 displayOpenXAds()

Function displayOpenXAds() is not defined

我在 acciones.js 文件中有一个名为 displayOpenXAds() 的函数,定义如下:

$(document).ready(function () {

    function displayOpenXAds(zone_id) {
        var m3_u = (location.protocol == 'https:' ? 'https://openx.elclarinweb.com/www/delivery/ajs.php' : 'http://openx.elclarinweb.com/www/delivery/ajs.php');
        var m3_r = Math.floor(Math.random() * 99999999999);
        if (!document.MAX_used) document.MAX_used = ',';
        document.write("<scr" + "ipt type='text/javascript' src='" + m3_u);
        document.write("?zoneid=" + zone_id);
        document.write('&amp;cb=' + m3_r);
        if (document.MAX_used != ',') document.write("&amp;exclude=" + document.MAX_used);
        document.write(document.charset ? '&amp;charset=' + document.charset : (document.characterSet ? '&amp;charset=' + document.characterSet : ''));
        document.write("&amp;loc=" + escape(window.location));
        if (document.referrer) document.write("&amp;referer=" + escape(document.referrer));
        if (document.context) document.write("&context=" + escape(document.context));
        if (document.mmm_fo) document.write("&amp;mmm_fo=1");
        document.write("'><\/scr" + "ipt>");
    }
}

如果我尝试在页面上的每个地方调用该函数,我会收到此错误:

Uncaught ReferenceError: displayOpenXAds is not defined at line 77

第 77 行有此代码:

<script type='text/javascript'>displayOpenXAds(19)</script>

脚本按以下顺序加载:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="<?php echo TEMPLATEURL ?>/js/jquery-1.7.2.min.js"><\/script>')</script>

<script type="text/javascript" src="//cdn.jsdelivr.net/prefixfree/1.0.7/prefixfree.min.js"></script>
<script>window.jQuery || document.write('<script src="<?php echo TEMPLATEURL ?>/js/prefixfree-1.0.6.min.js"><\/script>')</script>

<script type="text/javascript" src="//cdn.jsdelivr.net/modernizr/2.8.3/modernizr.min.js"></script>
<script>window.jQuery || document.write('<script src="<?php echo TEMPLATEURL ?>/js/modernizr.js"><\/script>')</script>

<script type="text/javascript" src="//cdn.jquerytools.org/1.2.7/full/jquery.tools.min.js"></script>
<script>window.jQuery || document.write('<script src="<?php echo TEMPLATEURL ?>/js/jquery.tools-1.2.7.min.js"><\/script>')</script>

<!--[if lt IE 9]>
<script type="text/javascript" src="//cdn.jsdelivr.net/html5shiv/3.7.2/html5shiv.min.js"></script>
<script>window.jQuery || document.write('<script src="<?php echo TEMPLATEURL ?>/js/html5shiv.js"><\/script>')</script>
<![endif]-->

<!--[if (gte IE 6)&(lte IE 8)]>
<script type="text/javascript" src="//cdn.jsdelivr.net/selectivizr/1.0.3b/selectivizr.min.js"></script>
<script>window.jQuery || document.write('<script src="<?php echo TEMPLATEURL ?>/js/selectivizr-1.0.2.min.js"><\/script>')</script>
<![endif]-->

<script type="text/javascript">
    var TEMPLATEURL = '<?php echo TEMPLATEURL; ?>';
</script>

<script type="text/javascript" src="<?php echo TEMPLATEURL ?>/js/acciones.js"></script>

为什么函数未定义?为了避免等待锁,当页面完全加载时加载函数的正确方法是什么?

您遇到的问题是执行顺序。这是一个简短的回顾:

  1. 浏览器开始读取文档。
  2. 它加载 jQuery 和其他库等
  3. 它标记您的代码(定义函数)在整个文档准备就绪后执行。
  4. 最终我们到达第 77 行,它立即被评估,但由于函数尚未定义而失败。
  5. 我们到达文档末尾,文档准备就绪,您的代码是 运行,函数现在已定义。