所以我有这个代码:
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 was $strlen charchters long”效果很好。
我也尝试删除 json_encode()
,但也没有。
最佳答案
好的,我知道这是怎么回事了。这里的评论中有很多错误信息。
首先让我们澄清一下这里的误解:
<?php ... ?>
中的 PHP 语句不需要分号。不需要。 "The closing tag of a block of PHP code automatically implies a semicolon; you do not need to have a semicolon terminating the last line of a PHP block."JavaScript 会自动在行尾插入分号 What are the rules for JavaScript's automatic semicolon insertion (ASI)?
OP 的代码已损坏,因为 JavaScript 未在以下行中添加分号:
var length = <?php echo $strlen ?>
为什么不呢?
One newline character (or sequence) is dropped out by the parser [immediately] after "?>"
这对于 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 ?>;
关于javascript - 将 PHP 代码传递给 Javascript 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20849284/