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