繁体   English   中英

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

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

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

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

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM