使用 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 < numOfRows
会在比较之前将numOfRows
转换为整数,所以结果应该是一样的。
试过了,但不幸的是它没有帮助:/
更新了我的帖子,让那个版本在没有 javascript 的情况下在 phpfiddle 中工作
;最后也没有用。
@Martin Henriksen 我该怎么做? :) 你的意思是在开发者工具中调试吗?【参考方案3】:
您没有忘记任何 $。 JS 变量不需要 $。
就您的 json_encode 而言,如果您只是将整数从 PHP 传递给 JS,则无需 json_encode。只需在 JS 源中将变量作为 <?=$numOfRows?>
传递给 JS。
【讨论】:
不要假设他们启用了短标签。 在 PHP 5.4+ 中,<?=
(echo shorthand) 在没有启用短标签的情况下可用......假设你假设他们有短标签启用或 5.4+:php.net/manual/en/migration54.new-features.php以上是关于使用 json_encode 将 php 变量转换为 javascript的主要内容,如果未能解决你的问题,请参考以下文章