将PHP代码传递给Javascript将无法正常工作

时间:2013-12-30 23:25:00

标签: 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值的警告框。

“你的是$ strlen charchters long”工作得很好。

我也尝试删除json_encode(),但两者都没有。

6 个答案:

答案 0 :(得分:6)

好的,我知道这里发生了什么。这里的评论中有很多错误的信息。

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

OP的代码被破坏,因为JavaScript没有在以下行添加分号:

var length = <?php echo $strlen ?>

为什么不呢?

  

解析器[立即]在“?&gt;”之后删除了一个换行符(或序列)

对于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 ?>;

答案 1 :(得分:1)

这应该有效:

...

$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';

...

答案 2 :(得分:1)

您在这里错过了分号:var length = <?php echo $strlen ?>;

答案 3 :(得分:1)

                var length = <?php echo $strlen ?>

也许将其改为

var length = <?php echo $strlen ?> ;

答案 4 :(得分:0)

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; ?>;

答案 5 :(得分:0)

把它放在引号中。为我工作。

var length ="<?php echo $strlen ?>";