未定义函数 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('&cb=' + m3_r);
if (document.MAX_used != ',') document.write("&exclude=" + document.MAX_used);
document.write(document.charset ? '&charset=' + document.charset : (document.characterSet ? '&charset=' + document.characterSet : ''));
document.write("&loc=" + escape(window.location));
if (document.referrer) document.write("&referer=" + escape(document.referrer));
if (document.context) document.write("&context=" + escape(document.context));
if (document.mmm_fo) document.write("&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>
为什么函数未定义?为了避免等待锁,当页面完全加载时加载函数的正确方法是什么?
您遇到的问题是执行顺序。这是一个简短的回顾:
- 浏览器开始读取文档。
- 它加载 jQuery 和其他库等
- 它标记您的代码(定义函数)在整个文档准备就绪后执行。
- 最终我们到达第 77 行,它立即被评估,但由于函数尚未定义而失败。
- 我们到达文档末尾,文档准备就绪,您的代码是 运行,函数现在已定义。
我在 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('&cb=' + m3_r);
if (document.MAX_used != ',') document.write("&exclude=" + document.MAX_used);
document.write(document.charset ? '&charset=' + document.charset : (document.characterSet ? '&charset=' + document.characterSet : ''));
document.write("&loc=" + escape(window.location));
if (document.referrer) document.write("&referer=" + escape(document.referrer));
if (document.context) document.write("&context=" + escape(document.context));
if (document.mmm_fo) document.write("&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>
为什么函数未定义?为了避免等待锁,当页面完全加载时加载函数的正确方法是什么?
您遇到的问题是执行顺序。这是一个简短的回顾:
- 浏览器开始读取文档。
- 它加载 jQuery 和其他库等
- 它标记您的代码(定义函数)在整个文档准备就绪后执行。
- 最终我们到达第 77 行,它立即被评估,但由于函数尚未定义而失败。
- 我们到达文档末尾,文档准备就绪,您的代码是 运行,函数现在已定义。