问题:返回数组,但不是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);
答案 0 :(得分: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));
答案 1 :(得分:0)
无需直接使用$i++;
while($sctg = mysql_fetch_assoc($get_sctg)){
$json_values[] = array("ID" => $sctg['ID'], "NAME" => $sctg['NAME']);
}
它将返回JSON