繁体   English   中英

使用json_encode将php变量转换为javascript

[英]php variable to javascript with json_encode

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

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

继承人的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);

但没有任何效果。

在这种情况下,不需要json_encode

只需更换

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

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

编辑:您缺少一个;

<?php echo json_encode($numOfRows) ?>

应该

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

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


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

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

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

在使用PHP将整数转换为整数的情况下,这是全局的。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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