我有一个运行 SQL 查询的 PHP 脚本。我想将结果放入数组中,将其编码为 JSON 对象,将其回显给调用它的 Javascript,然后将其用作数组来编写一些 HTML。
这是使用 POST 调用 PHP 脚本的 JS。我尝试使用 JSON.parse(data)
解析回显数据(我也尝试了 jQuery.parseJSON(data)
- 不确定是否有区别),然后我显示用于测试的 HTML 页面上的原始回显数据。
var components = []; // create empty array for component list
if ($('#area').val) { // if area contains a value and isn't zero (i.e. an area has been selected)
$.post("/basic/get_area_components.php"
,{area: $("#area").val()}
,function(data){ components = JSON.parse(data);
$("#components_raw").html(data);
$("#components").html(components);
});
}
PHP 脚本(建立数据库连接后)如下所示:
$result = $conn->query("SELECT Component FROM ConfigComponent WHERE Parent =" . $area);
while($row = $result->fetch_array()) {
$rows[] = $row;
}
$i = 1;
foreach ($rows as $value) {
$components[$i] = $value[0];
$i++;
}
echo json_encode($components);
当我运行脚本时,我在 HTML 页面上得到如下原始输出:
{"1":"Handlebar","2":"Stem","3":"Headset","4":"Fork"}
这似乎是一个格式正确的 JSON 对象,但在解析的 components
数组中没有任何内容,也没有异常。我已尝试使用 forEach
扫描数组并单独打印或提醒元素,但无济于事。
如何正确解析 JSON 对象并在 Javascript 中使用它?是JS解析的问题,还是PHP编码的问题?
最佳答案
这种行为是正常的。 Javascript 只支持索引数组。因为您在 php 中的索引以 1 而不是 0 开头,所以它变成了一个关联数组而不是索引。
$i = 0; // start with 0
foreach ($rows as $value) {
$components[$i] = $value[0];
$i++;
}
或
foreach ($rows as $value) {
// or don't use an index when adding a value to the array
$components[] = $value[0];
}
这将产生一个 json 数组 [“ Handlebars ”,“把立”,“耳机”,“前叉”]
关于javascript - 使用 JSON 将包含 SQL 查询结果的数组返回到网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47166463/