谁能帮我理解一下原因:
<?php $x = 'b'; ?>
<script> var v=<?php echo $x;?>; alert(v);</script>
不弹出警告,而
<?php $x = '3'; ?>
<script> var v=<?php echo $x;?>; alert(v);</script>
会弹出一个带有文本3的警告吗?
您将单个字母b
回显到脚本元素中,结果是:
<script> var v=b; alert(v);</script>
就JavaScript而言,这是一个标识符,而不是字符串。由于没有定义JavaScript变量b
,因此会发生错误,并且不会发出任何警告。
当你回显3时:
<script> var v=3; alert(v);</script>
JavaScript看到的是一个数字字面量3,它没有问题分配和警告。
始终查看渲染输出
<script> var v = 3; alert(v); </script>
与
<script> var v = b; alert(v); </script>
要可靠地将PHP变量传递到JavaScript中,使用json_encode
尝试:
<?php $x = '3'; ?>
<script> var v='<?php echo $x;?>'; alert(v);</script>
基本上PHP代码在页面加载之前在服务器端运行,Javascript在页面中的脚本加载后开始执行。
所以根据你的代码
<?php $x = 'b'; ?>
<script> var v=<?php echo $x;?>; alert(v);</script>
当该代码在服务器端被解析时,php值将被填充到脚本标记中。
就像
<script> var v=b; alert(v);</script>
现在,当页面在客户端呈现时。一旦这一行被执行,javascript开始查找变量b。对于PHP来说,它是一个字符串,但对于javascript来说,它是一个变量,因为它没有被双引号括起来。
由于javascript没有找到任何名为b的变量,因此抛出b is undefined错误。
现在说到数字:
<?php $x = '3'; ?>
<script> var v=<?php echo $x;?>; alert(v);</script>
在客户端,这将呈现为
<script> var v=3; alert(v);</script>
现在它只是一个数字而不是一个变量。Javascript不会抛出任何错误。
如果你想让字符串在javascript中工作,那么
在PHP变量
中为b添加引号 <?php $x = '"b"'; ?>
<script> var v=<?php echo $x;?>; alert(v);</script>
现在即使是PHP字符串也会给出alert
您生成的javascript缺少封闭引号或文字值。因此,赋值var v=...
遇到一个错误,除非赋值是一个数字。
<script> var v="<?php echo $x;?>"; alert(v);</script>
显示所有输出(但要注意$x
中的双引号)。