0

问题:返回数组,但不在 json 中。

结果:必须在数组中返回数组。外部数组具有带数字的键,值是具有键“ID”和“NAME”的数组,并且从数据库中分配了值。

$i = 0;
$json_values = array();
while($sctg = mysql_fetch_assoc($get_sctg)){
    $json_values[$i] = array("ID" => $sctg['ID'], "NAME" => $sctg['NAME']);
    $i++;
}
echo json_encode($json_values);
4

2 回答 2

1

您的代码非常好 - 您只是误解了 JavaScript 中数组和对象之间的区别。

[{"ID":"4","NAME":"asdasd"},
 {"ID":"3","NAME":"LOKS"},
 {"ID":"1","NAME":"LOL"}]

这是一个包含三个元素的数组的 JSON。每个元素都是一个具有属性ID和的对象NAME

假设数组存储在data. 您可以使用简单的循环遍历该数组中的对象for

for(var i = 0; i < data.length; i++) {
    var row = data[i];
    // Here you can use row.ID and row.NAME
}

我猜你希望你的 JSON 看起来像这样:

{
    0: {"ID":"4","NAME":"asdasd"},
    1: {"ID":"3","NAME":"LOKS"},
    2: {"ID":"1","NAME":"LOL"}
}

这实际上很糟糕,因为 JavaScript 中的对象没有排序(即使它们实际上在大多数浏览器中,但不能保证!)。因此,当迭代此类元素中的行时(使用for(var key in data)),您不一定会首先获得 ID=4 的行,因为它的键为零。

但是,如果出于某种原因你真的想要一个对象而不是一个数组(你不需要!),你总是可以将数组转换为对象:

echo json_encode((object)$json_values);

作为旁注,出于安全原因,通常将对象作为 JSON 中的顶级元素是一个好主意(您可以重新定义数组构造函数,然后包含带有脚本标记的顶级数组的内容,从而访问如果数据被 XHR 请求访问,通常受相同的源策略保护),所以我会像这样更改 PHP 代码:

echo json_encode(array('rows' => $json_values));
于 2012-05-03T09:52:21.940 回答
0

无需使用 $i++;直接使用

while($sctg = mysql_fetch_assoc($get_sctg)){
    $json_values[] = array("ID" => $sctg['ID'], "NAME" => $sctg['NAME']);    
}

它会返回给你 JSON

于 2012-05-03T09:16:09.330 回答