从php调用javascript函数不起作用

从php调用javascript函数不起作用,javascript,php,json,Javascript,Php,Json,我对此的研究相当令人沮丧,尽管我不明白为什么这不起作用 当我的索引页面通过php从数据库加载它应该加载的数据,然后将数据回显到javascript,javascript在javascript中格式化并使用该数据时,如果我在html body标记的主体上放置一个onload事件,该事件将使用加载到js变量数据中的数据,则效果良好。这是可行的,但我不喜欢每次加载页面时都使用onload事件 以下是index.php文件顶部的php代码: if ($confirmation){ $data

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

当我的索引页面通过php从数据库加载它应该加载的数据,然后将数据回显到javascript,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>';

}
if($confirmation){
$data=$membership->get_data(“assump”);
echo'var data='.json_encode($data);
var dataload='.json_encode(false)。';loadData();';
}
loadData()函数:

<script type="text/javascript">

    function loadData(){

        // Do stuff with the data

    }
</script>

函数loadData(){
//处理数据
}

js函数loadData()在结束标记体之前的同一php文件中进一步写入。我应该让php来构建脚本吗?或者把脚本放在别的地方?或者可以调用这个js函数吗?

看起来您在两个单独的脚本块中有两段代码。那不行

为了使功能提升工作,它们需要在同一标签中(需要在标签中定义提升的功能)

下面是一个类似的问题,并给出了更详细的答案:


更新(每个请求)

浏览器一次读取一个JS块,因此提升只能在同一块中工作(当然,如果之前定义了函数)。在您的情况下,最简单的解决方案可能是将代码分配给PHP变量,然后在同一脚本块中回显:

PHP

HTML


//或
函数loadData(){
//处理数据
}
请注意,这允许您通过PHP注入JS的多行/部分,这就是为什么我使用了
$JS.=…
,而不仅仅是
$JS=…


请注意,除非您先让PHP解析外部.js文件,否则这将不适用于外部.js文件(代码中无需担心,因为js位于正常解析的HTML文件中)。

PHP代码解析后的HTML输出是什么?@blex我在您的示例中没有看到函数,但定义了一个变量。Thx代表downvote顺便说一句,@blex这里是我所说的一个恰当的例子:好的,我正在删除我的downvote,但是你的jsBin中的问题不是分开的标签,只是你在调用函数后声明了它。反转那些脚本标记,然后单击。(哦,除非你编辑,否则无法撤消我的否决票)@blex Yup,浏览器一次读取一个JS块,因此提升只能在同一块内工作(或者如果函数之前定义过)。。。不,别担心,我不在乎积分。只是以后不要那么快地扣动扳机;)@哈哈,好吧,你赢了。在那里,我添加了几行可能有用的内容。
$js = '';

if ($confirmation){

    $data = $membership->get_data("assump");

    $js .= 'var data = '. json_encode($data) .';
        var dataLoaded = ' . json_encode(false) . '; loadData();';

}
<script type="text/javascript">

    <?= $js ?> // or <?php echo $js; ?>

    function loadData(){

        // Do stuff with the data

    }
</script>