Javascript 在JS中调用php变量

Javascript 在JS中调用php变量,javascript,php,Javascript,Php,你能告诉我为什么这不起作用吗 <html> <body> <?php $var1 = "hello"; echo $var1; ?> <button type="button" onclick="document.getElementById('demo').innerHTML = <?php echo(json_encode($var1)); ?>;"> HI</button> <p id="demo">

你能告诉我为什么这不起作用吗

<html>
<body>

<?php
$var1 = "hello";
echo $var1;
?>

<button type="button"
onclick="document.getElementById('demo').innerHTML = <?php echo(json_encode($var1)); ?>;">
HI</button>

<p id="demo"></p>

</body>
</html>

  • 由于
    $var1
    字符串
    ,因此需要将其括在引号中
  • 由于
    $var1
    是字符串,而不是
    数组
    对象
    ,因此不需要
    json_encode
  • 在字符串周围使用引号(请参见引号的标记位置):

    onclick=“document.getElementById('demo')。innerHTML=''”>
    //                                         ^                              ^
    
    它是一个字符串。需要在字符串周围正确添加

    onclick="document.getElementById('demo').innerHTML = '<?php echo(json_encode($var1)); ?>';"
    
    onclick=“document.getElementById('demo')。innerHTML=”
    
    尽管有很多答案,我还是会给出我认为OP在想什么的2美分:

    基本思想是使用json_encode使hello字符串打印
    “hello”
    ,而不是
    hello
    。问题实际上是,这将导致:

    onclick="document.getElementById('demo').innerHTML = "hello";"
    
    这是无效的,因为双引号中有双引号

    因此,如果愿意,他可以继续使用
    json_encode
    ,只要他将双引号更改为单引号:

    onclick='document.getElementById("demo").innerHTML = <?php echo json_encode($var1); ?>;'
            ^ <-- single quote       ^----^ <-- double quote here     single there too --> ^
    

    您不需要对字符串进行json_编码。只需确保字符串中只有转义引号,并将其包装为单个引号。
    onclick='document.getElementById("demo").innerHTML = <?php echo json_encode($var1); ?>;'
            ^ <-- single quote       ^----^ <-- double quote here     single there too --> ^
    
    onclick='document.getElementById('demo').innerHTML = "hello";'