【问题标题】:Calling javascript function from php not working从php调用javascript函数不起作用
【发布时间】:2014-08-17 18:12:36
【问题描述】:

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

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

【问题讨论】:

  • PHP 代码的解析 HTML 输出是什么?

标签: javascript php json


【解决方案1】:

似乎您在两个单独的脚本块中有两段代码。那是行不通的。

为了使函数提升起作用,它们需要在同一个标​​签中(需要在那里定义被提升的函数)。

这是一个类似的问题,答案更详细: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 文件中)。

【讨论】:

  • @blex 我在你的例子中没有看到函数提升,而是一个定义的变量。顺便说一句,谢谢。
  • @blex 这是我所说的一个恰当的例子:jsbin.com/vinupoti/9
  • 好的,我正在删除我的反对票,但您的 jsBin 中的问题不是分隔标签,只是您在 调用它之后声明了该函数。反转这些脚本标签和it works。 (糟糕,除非您进行编辑,否则无法撤消我的反对票)
  • @blex 是的,浏览器一次读取一个 JS 块,所以提升只能在同一个块内工作(或者如果之前定义了函数,当然)......不,不要'不用担心——我不在乎代表点数。只是以后不要那么快触发;)
  • @blex 哈哈,很好,你赢了。在那里,我添加了几行可能有用的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多