Javascript json_编码只在某些php数组上工作,不为其他数组导入数据

Javascript json_编码只在某些php数组上工作,不为其他数组导入数据,javascript,php,mysql,json,mariadb,Javascript,Php,Mysql,Json,Mariadb,我正在尝试使用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->

我正在尝试使用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); ?>;

json\u encode将数组转换为字符串;如果希望在Javascript中再次访问数组,请再次将字符串解析回数组,例如:

var users = JSON.parse('<?php echo json_encode($bu); ?>');
var users=JSON.parse(“”);

但是,像这样动态创建JS是一种非常糟糕的做法——如果您希望脚本包含来自PHP的信息,可以将对象插入到Javascript解析的元素中,或者使用数据属性;如果希望在Javascript中再次访问数组,请再次将字符串解析回数组,例如:

var users = JSON.parse('<?php echo json_encode($bu); ?>');
var users=JSON.parse(“”);

但是,像这样动态创建JS是一种非常糟糕的做法——如果您希望脚本包含来自PHP的信息,可以将对象插入到Javascript解析的元素中,或者使用数据属性。

正如@kip在评论中指出的那样,失败的最可能原因是unicode字符或其他特殊字符的转换导致json_编码无法对数组进行编码

最有可能的情况是,您需要使用一个json_编码预定义常量,例如@kip recommended:
json_编码($bu,json_UNESCAPED_UNICODE)

实际上,我会进一步使用:
json_编码($bu,json_UNESCAPED_UNICODE,json_PARTIAL_OUTPUT_ON_ERROR)

最后,因为您知道在运行您的代码行之后,您会遇到某种json_编码错误
var用户=<?php echo json_编码($bu);?>

您可以添加以下行:
json_last_error()


这将准确地告诉您问题所在,并允许您调整json_编码的参数以使用$bu数组

正如@kip在评论中指出的,失败的最可能原因是unicode字符或其他特殊字符的转换导致json_编码无法对数组进行编码

最有可能的情况是,您需要使用一个json_编码预定义常量,例如@kip recommended:
json_编码($bu,json_UNESCAPED_UNICODE)

实际上,我会进一步使用:
json_编码($bu,json_UNESCAPED_UNICODE,json_PARTIAL_OUTPUT_ON_ERROR)

最后,因为您知道在运行您的代码行之后,您会遇到某种json_编码错误
var用户=<?php echo json_编码($bu);?>

您可以添加以下行:
json_last_error()


这将准确地告诉您问题所在,并允许您调整json_编码的参数以使用$bu数组

您从不使用
$result1
执行任何操作。使用
LIMIT
而不使用
orderby
意味着所选的10行是不可预测的。实际上,我没有在这里发布完整的代码,这很长。我将删除无用的位扫描,您发布的json格式不正确?您所说的未正确导入是什么意思。控制台是否显示错误?如果在数据库连接中设置了正确的字符集,请尝试以下操作:
echo json\u encode($bu,json\u UNESCAPED\u UNICODE)
,您有正确的字符集格式吗?您从不使用
$result1
执行任何操作。使用
LIMIT
而不使用
orderby
意味着所选的10行是不可预测的。实际上,我没有在这里发布完整的代码,这很长。我将删除无用的位扫描,您发布的json格式不正确?您所说的未正确导入是什么意思。控制台是否显示错误?如果在数据库连接中设置了正确的字符集,请尝试以下操作:
echo json\u encode($bu,json\u UNESCAPED\u UNICODE)
,您有正确的字符集格式吗?即使我不想在javascript中使用它,至少json_encode应该可以正常工作?问题是json_encode对除了$BU之外的所有东西都有效,即使我不想在javascript中使用它,至少json_encode应该可以正常工作?问题是json_encode对除了$bu之外的所有东西都有效