使用json_encode将php变量改为javascript

时间:2015-10-12 15:24:38

标签: javascript php html json

我知道这个话题已经讨论过几次,但我似乎无法找到我做错的事。

我正在尝试做什么: 用户键入一个数字,然后单击该按钮将创建一个包含该列数的表。

继承人的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是问题所在。

谢谢!

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

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

我也试过

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

但没有任何作用。

3 个答案:

答案 0 :(得分:3)

在这种情况下,

json_encode不是必需的。

简单地替换

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

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

答案 1 :(得分:0)

编辑:你错过了;在

<?php echo json_encode($numOfRows) ?>

应该是

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

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

你正在混合整数和字符串。 PHP中的数据库总是返回字符串以及在for循环中将变量用作int的方式。

我认为以下改变将取得正确的结果。

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

在使用PHP转换为整数函数的地方,存在全局级别。

答案 2 :(得分:-1)

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

就你的json_encode而言,如果你只是将一个整数从PHP传递给JS,则不需要json_encode。只需将变量传递给JS,作为JS源代码中的<?=$numOfRows?>