我正在尝试使用json_encode
将三个数组从php导入js以下是代码:
<?php
$query2 = "SELECT * FROM all_data";
$result2 = $conn->query($query2);
$bu = [];
$rank = [];
$id = [];
if ($result2->num_rows > 0) {
while($row2 = $result2->fetch_assoc()) {
$bu[] = $row2["bu"];
$rank[] = $row2["rank"];
$id[] = $row2["id"];
echo "<tr class='dn' id='u-" . $row2["rank"] . "'>";
echo "<td>" . $row2["rank"] . "</td>";
echo "<td>" . $row2["bu"] . "</td>";
echo "<td>" . $row2["tokens"] . "</td>";
echo "</tr>";
}
}
?>
var users = <?php echo json_encode($bu); ?>;
var ranks = <?php echo json_encode($rank); ?>;
var identifier = <?php echo json_encode($id); ?>;
问题是,数组排名和标识符是否正确导入,但用户不是。这个脚本在我使用它的最后几次工作。然而,最近我更改了表all_data,删除它然后再次从csv导入它。然而,当我导入时,charset是utf8,所以我不明白这里可能出现的问题。
即使我只是做<?php echo json_encode($bu) ?>
,它也无法正常工作。但是<?php print_r($bu) ?>
告诉我数组实际上不是空的,它实际上包含查询结果。
答案 0 :(得分:2)
json_encode将数组转换为字符串;如果您想在Javascript中再次访问该数组,请再次将该字符串解析回数组,例如:
var users = JSON.parse('<?php echo json_encode($bu); ?>');
但是这样做是非常糟糕的做法 - 如果你想让脚本从你的PHP提供信息,要么将对象插入到由Javascript解析的元素中,要么使用数据属性。
答案 1 :(得分:0)
正如@kip在注释中指出的那样,失败的最可能原因是unicode字符或其他导致json_encode无法对数组编码的特殊字符的转换。
您很有可能需要使用json_encode预定义常量之一,例如@kip建议:
json_encode($ bu,JSON_UNESCAPED_UNICODE);
我实际上将更进一步并使用:
json_encode($ bu,JSON_UNESCAPED_UNICODE,JSON_PARTIAL_OUTPUT_ON_ERROR)
最后,由于您知道在运行线路后会遇到某种json_encode错误
var users = <? PHP的回声json_encode($ bu); ?>;
您可以添加以下行:
json_last_error()
这将准确地告诉您问题是什么,并且应该允许您调整json_encode的参数以与$ bu数组一起使用。