我对此的研究相当令人沮丧,尽管我不明白为什么这不起作用。
当我的索引页面通过php从数据库加载数据,然后将数据回显到javascript,javascript格式化并处理数据,如果我在html body标签的主体上放置一个onload事件,然后将数据加载到js变量数据中,这会很好,但我不喜欢每次页面加载时都使用onload事件。
下面是在index.php文件顶部的php代码:
if ($confirmation){
$data = $membership->get_data("assump");
echo '<script type="text/javascript">var data = '. json_encode($data) .';
var dataLoaded = ' . json_encode(false) . '; loadData();</script>';
}
loadData()函数的作用是:
<script type="text/javascript">
function loadData(){
// Do stuff with the data
}
</script>
js函数loadData()被写在同一个php文件中,在结束标记体之前。我应该让php构建脚本吗?还是把脚本放在其他地方?或者可以调用这个js函数吗?
2条答案
按热度按时间dgsult0t1#
看起来你在两个独立的脚本块中有两段代码。这行不通。
为了使函数提升起作用,它们需要在同一个标记中(提升的函数需要在那里定义)。
下面是一个类似的问题,并给出了更详细的答案:Why is my javascript function not being called in my div?
UPDATE(按请求)
浏览器一次只读取一个JS块,所以提升只在同一个块中起作用(当然,如果函数之前已经定义了)。在您的情况下,最简单的解决方案可能是将代码赋给一个PHP变量,然后在同一个脚本块中回显它:
PHP语言
HTML语言
请注意,这允许您通过PHP注入JS的几行/几个部分,这就是为什么我使用
$js .= ...
而不仅仅是$js = ...
。请注意,这不适用于外部的.js文件,除非首先让PHP解析它们(在代码中没有什么可担心的,因为JS在正常解析的HTML文件中)。
xbp102n02#
控制台日志:(铬)
我的结论是,函数定义 * 必须 * 在使用之前,并且 * 可能 * 在单独的脚本块中。
我没有测试
onLoad
或<script src=...>
,或者其他的方法,我担心“必须在调用之前声明”可能指的是代码的物理位置,或者动态加载,或者其他的东西。