使用 json_encode 将 php 变量转换为 javascript

Posted

技术标签:

【中文标题】使用 json_encode 将 php 变量转换为 javascript【英文标题】:php variable to javascript with json_encode 【发布时间】:2016-01-10 03:30:23 【问题描述】:

我知道这个话题已经讨论过几次了,但我似乎找不到我做错了什么。

我正在尝试做的事情: 用户输入一个数字,然后通过单击按钮创建一个具有该列数的表。

这是 php

<?php
$twig = require_once('bootstrap.php');
$hostname = 'localhost';
$username = 'root';
$password =  '';
$conn = new PDO("mysql:host=$hostname;dbname=mydb", $username, $password);

echo $twig->render('index.html', array());

$numOfRows = 1;

if(isset($_POST['button']))
    $numOfRows = $_POST['num_input'];

html/javascript:

<html>
<head>
<script>
function insertRows()
    var numOfRows = <?php echo json_encode($numOfRows) ?>;
    var out = "<table><tr><th>test</th>";

    for (i = 0; i < numOfRows; i++)
        out += "<th>test</th>";
    

    out += "</tr></table>";
    document.getElementById("table").innerHTML = out;

</script>
</head>

<body>
<form action="index.php" method="post">
  <textarea id="num_input" name ="num_input"></textarea>
  <button type="button"  name="button" onclick="insertRows()"> Go </button>
</form>

<p id="table"></p>

</body>
</html>

没有错误或任何东西,因为我没有使用 IDE,只是在 vim 中执行,但错误是不会发生。如果我将 for 循环中的“numOfRows”更改为一个数字,它可以工作,所以我很确定 json_encode 是问题所在。

谢谢!

编辑: 只是为了测试它,我在 php 文件中使用了一个字符串变量$str = "test";,而不是使用 for 循环,我只是将 javascript 编辑为

var str = <?php echo json_encode($str); ?>;
alert(str);

我也试过了

var str = <?php echo $str; ?>;
alert(str);

但没有任何效果。

【问题讨论】:

这是 js var numOfRows 而不是 php。为什么我必须在 javascript 变量中使用 $? 你为什么用json? 为什么numOfRows实际上是列数的计数? devlin carnate:为什么不呢,还有什么好用的?我是 php 新手,我只是在玩,我很高兴尝试别的东西:) 你在View Source时看到了什么? 【参考方案1】:

json_encode 在这种情况下是不必要的。

简单替换

var numOfRows = <?php echo json_encode($numOfRows); ?>;

var numOfRows = <?php echo (int)$numOfRows; ?>;

【讨论】:

在 PHP 部分中添加了分号。也许会有所帮助。 如果这也不起作用,那么json_encode() 没有任何问题。问题是$numOfRows 在该行代码运行时没有定义。 $numOfRows 是在您的第一个代码块中定义的,但是这两个代码块是如何相互连接的?将它设置在一个地方并不会神奇地让它在其他地方工作。#【参考方案2】:

编辑:您缺少一个 ;在

<?php echo json_encode($numOfRows) ?>

应该是

<?php echo json_encode($numOfRows);?>

在这些情况下,如果最好检查服务器日志,这将自动让您更好地自己发现这些错误。


您正在混淆整数和字符串。 PHP 中的数据库将始终返回字符串以及您在 for 循环中将变量用作 int 的方式。

我相信以下更改会达到正确的结果。

$numOfRows = intval($_POST['num_input']);

您使用 PHP 转换为整数函数的地方是全局级别的。

【讨论】:

但是i &lt; numOfRows会在比较之前将numOfRows转换为整数,所以结果应该是一样的。 试过了,但不幸的是它没有帮助:/ 更新了我的帖子,让那个版本在没有 javascript 的情况下在 phpfiddle 中工作 ;最后也没有用。 @Martin Henriksen 我该怎么做? :) 你的意思是在开发者工具中调试吗?【参考方案3】:

您没有忘记任何 $。 JS 变量不需要 $。

就您的 json_encode 而言,如果您只是将整数从 PHP 传递给 JS,则无需 json_encode。只需在 JS 源中将变量作为 &lt;?=$numOfRows?&gt; 传递给 JS。

【讨论】:

不要假设他们启用了短标签。 在 PHP 5.4+ 中,&lt;?= (echo shorthand) 在没有启用短标签的情况下可用......假设你假设他们有短标签启用 5.4+:php.net/manual/en/migration54.new-features.php

以上是关于使用 json_encode 将 php 变量转换为 javascript的主要内容,如果未能解决你的问题,请参考以下文章

如何正确运用PHP json_encode函数进行中文转换

PHP json_encode转换空数组为对象

PHP json_encode( ) 函数介绍

json_encode() 删除属性 (PHP)

将PHP转换为Twig

php解决json_encode输出GB2312中文问题 (数组)