为什么Javascript警报只会弹出数字而不是字符串?

时间:2014-05-13 13:54:25

标签: javascript php alert

任何人都可以帮助我理解原因:

<?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的警告吗?

5 个答案:

答案 0 :(得分:7)

您在脚本元素中回显了一个字母b,结果是:

<script> var v=b;  alert(v);</script>

就JavaScript而言,这是一个标识符,而不是字符串。由于未定义JavaScript变量b,因此会发生错误,并且不会发出任何警报。

当你回应3:

<script> var v=3;  alert(v);</script>

JavaScript看到的是一个数字3,它没有分配和警告的问题。

答案 1 :(得分:3)

始终查看渲染的输出。

<script> var v = 3; alert(v); </script>

VS

<script> var v = b; alert(v); </script>

要将PHP变量可靠地传递给JavaScript,请使用json_encode

答案 2 :(得分:1)

尝试:

<?php $x = '3'; ?>
<script> var v='<?php echo $x;?>';  alert(v);</script>

答案 3 :(得分:1)

基本上,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是未定义的错误。

现在谈到数字:

<?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字符串也会提供警报

答案 4 :(得分:0)

您生成的javscript缺少封闭引号或字面值。因此,分配var v=...会遇到错误,除非指定的值是一个数字。

使用

<script> var v="<?php echo $x;?>";  alert(v);</script>

而不是查看所有输出(但要注意$x中的双引号)。