从php调用javascript函数不起作用

ajsxfq5m  于 2022-11-27  发布在  Java
关注(0)|答案(2)|浏览(298)

我对此的研究相当令人沮丧,尽管我不明白为什么这不起作用。
当我的索引页面通过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函数吗?

dgsult0t

dgsult0t1#

看起来你在两个独立的脚本块中有两段代码。这行不通。
为了使函数提升起作用,它们需要在同一个标记中(提升的函数需要在那里定义)。
下面是一个类似的问题,并给出了更详细的答案:Why is my javascript function not being called in my div?
UPDATE(按请求)
浏览器一次只读取一个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文件中)。

xbp102n0

xbp102n02#

echo "<script>function fBefore(x) { console.log('before'); }</script>\n";
echo "<script>fBefore(); fAfter(); </script>\n";
echo "<script>function fAfter(x)  { console.log('after');  }</script>\n";

控制台日志:(铬)

before
Uncaught ReferenceError: fAfter is not defined

我的结论是,函数定义 * 必须 * 在使用之前,并且 * 可能 * 在单独的脚本块中。
我没有测试onLoad<script src=...>,或者其他的方法,我担心“必须在调用之前声明”可能指的是代码的物理位置,或者动态加载,或者其他的东西。

相关问题