javascript - 将 PHP 代码传递给 Javascript 不起作用

标签 javascript php

所以我有这个代码:

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(),但也没有。

最佳答案

好的,我知道这是怎么回事了。这里的评论中有很多错误信息。

首先让我们澄清一下这里的误解:

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/

相关文章:

javascript - Angular : If-operations on $scope. 变量

javascript - 如何在单击时选中/取消选中单选按钮?

php - 在 require_once 中使用常量

php - 如何使用 PHP 和 AngularJS 从 MySQL 数据库中删除记录?

php - CodeIgniter - 查询数组输出三次而不是一次

php - 每月账单支付工作流程

javascript - AngularJS 是否会在 jQuery 的回退中加载?

javascript - 内部带有动画图像的元素的点击事件丢失

javascript - 使用 JS 找出字符串中字符重复的最简单方法是什么?

使用 $mock->expects($this->at(...)) 时 PHPUnit "Mocked method does not exist."