我对此的研究相当令人沮丧,但我不明白为什么这不起作用。
当我的索引页面加载它应该通过php从数据库加载数据然后将数据回显到javascript格式并使用该数据的javascript时,如果我在html正文的主体上放置一个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函数吗?
答案 0 :(得分:2)
好像你在两个独立的脚本块中有两段代码。那不会起作用。
为了使功能提升起作用,它们需要在同一个标签中(需要在那里定义提升的功能)。
以下是一个类似的问题,其中包含更详细的答案:Why is my javascript function not being called in my div?
更新(按要求)
浏览器一次读取一个JS块,因此吊装仅在同一个块内工作(或者如果之前定义了该功能)。在您的情况下,最简单的解决方案可能是将代码分配给PHP变量,然后在同一个脚本块中回显:
PHP
$js = '';
if ($confirmation){
$data = $membership->get_data("assump");
$js .= 'var data = '. json_encode($data) .';
var dataLoaded = ' . json_encode(false) . '; loadData();';
}
HTML
<script type="text/javascript">
<?= $js ?> // or <?php echo $js; ?>
function loadData(){
// Do stuff with the data
}
</script>
请注意,这允许您通过PHP注入JS的几行/部分,这就是我使用$js .= ...
而不是$js = ...
的原因。
请注意,这不会与外部.js文件一起使用,除非你先让PHP解析它们(因为你的JS在正常解析的HTML文件中,所以你的代码无需担心)。