从php调用javascript函数无法正常工作

时间:2014-06-26 19:02:11

标签: javascript php json

我对此的研究相当令人沮丧,但我不明白为什么这不起作用。

当我的索引页面加载它应该通过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函数吗?

1 个答案:

答案 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文件中,所以你的代码无需担心)。