[英]Passing PHP code to Javascript won't work
所以我有这段代码:
else {
$strlen = json_encode(strlen($_POST['message']));
?>
<script language="javascript" type="text/javascript">
var length = <?php echo $strlen ?>
alert("Your message was too long (max 255 chars), yours was " + length);
</script>
<?php
echo "Your message was too long (max 255 chars)";
echo "Yours was " . $strlen . " charachters long";
}
...并且它将不会显示带有字符串实际strlen
值的警告框。
“ Yours是$ strlen的charchters长”工作正常。
我也尝试过删除json_encode()
,但也没有。
好,我知道这里发生了什么。 这里的评论中有很多错误信息。
首先,让我们澄清一下这里的误解:
PHP的俏皮话在<?php ... ?>
不需要分号。 “ PHP代码块的结束标记会自动表示一个分号;您无需在分号结尾处插入PHP块的最后一行。”
JavaScript会在行尾自动插入分号。JavaScript 自动分号(ASI)的规则是什么?
OP的代码已损坏,因为JavaScript不在以下行添加分号:
var length = <?php echo $strlen ?>
为什么不?
解析器[立即]在“?>”之后丢弃一个换行符(或序列)
这对php来说有点奇怪(我认为),但是我已经证实它确实以这种方式表现。
因此,总之,您确实需要在该行和类似的行上使用分号,因为在解析时,它看起来像是: var length = 3 alert("Your message...
否则。
如果OP在他的问题中包括生成的源(JS),这将立即显而易见。
一种替代解决方案是在其中添加更多的空格,以便JS ASI仍然可以工作-但正如其他人提到的那样,即使在可选的情况下,在JS中添加分号也是其公认的“良好实践”。
在以下PHP文档中找到了我的答案: http : //php.net/manual/en/language.basic-syntax.instruction-separation.php及其注释。
TL; DR: 在此行的末尾添加分号
var length = <?php echo $strlen ?>;
这应该工作:
...
$strlen = strlen($_POST['message']);
?>
<script language="javascript" type="text/javascript">
var length = <?php echo $strlen; ?>;
alert("Your message was too long (max 255 chars), yours was " + length);
</script>
<?php
echo 'Your message was too long (max 255 chars)';
echo 'Yours was ' . $strlen . ' charachters long';
...
您在这里缺少分号: var length = <?php echo $strlen ?>;
var length = <?php echo $strlen ?>
也许将其更改为
var length = <?php echo $strlen ?> ;
json_encode
期望将数组作为输入参数,为它提供一个int值(字符串的长度)。
您实际上不需要将int值转换为json对象, $strlen = strlen($_POST['message']);
可能就足够了。
您还像这样缺少分号:
var length = <?php echo $strlen ?>
//Should be:
var length = <?php echo $strlen; ?>
//Or even:
var length = <?php echo $strlen; ?>;
用引号引起来。 为我工作。
var length ="<?php echo $strlen ?>";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.