将MySQL数据库数据转存至JavaScript数组遇阻,求助排查读取问题
问题分析与解决方案
嘿,我一眼就看出问题出在哪啦!你现在的代码是在循环里每次单独输出一条数据的JSON,这样最终给到前端的是一串不合法的JSON片段(比如像["苹果"]["香蕉"]["橙子"]这样),根本不是一个标准的JSON数组,所以前端没法正确解析。而你手动填充的时候是输出一个完整的数组JSON,所以能正常运行。
修正思路
先把数据库里的所有数据收集到一个PHP数组中,最后一次性把整个数组转成JSON输出,这样前端拿到的就是合法的数组格式了。
修正后的代码(两种写法)
写法1:用循环收集数据
var countries = <?php require('connection.php'); $query = 'SELECT product_name FROM products'; $result = mysqli_query($conn, $query); // 先初始化一个空数组用来存所有产品名 $productsList = []; // 循环读取每一行数据,把产品名加入数组 while($product = mysqli_fetch_array($result, MYSQLI_NUM)){ // MYSQLI_NUM返回的是索引数组,第一个元素就是product_name $productsList[] = $product[0]; } // 最后一次性输出完整的JSON数组 echo json_encode($productsList); ?>;
写法2:用mysqli_fetch_all更简洁
var countries = <?php require('connection.php'); $query = 'SELECT product_name FROM products'; $result = mysqli_query($conn, $query); // 直接获取所有行的索引数组 $allProducts = mysqli_fetch_all($result, MYSQLI_NUM); // 提取所有行的第一个元素(也就是product_name)组成新数组 $productsList = array_column($allProducts, 0); // 输出JSON echo json_encode($productsList); ?>;
额外建议
最好加上错误处理,避免数据库查询失败时输出错误信息破坏JSON格式:
var countries = <?php require('connection.php'); $query = 'SELECT product_name FROM products'; $result = mysqli_query($conn, $query); $productsList = []; if ($result) { while($product = mysqli_fetch_array($result, MYSQLI_NUM)){ $productsList[] = $product[0]; } } echo json_encode($productsList); ?>;
这样修改后,前端就能拿到一个合法的JSON数组,和你手动填充的效果完全一致啦!
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

