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"}]

これは、3 つの要素を持つ配列を含む 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 のオブジェクトは順序付けされていないため、これは実際には悪いことです (実際にはほとんどのブラウザーに存在しますが、それは保証されていません!)。したがって、そのような要素の行を ( を使用して) 反復処理する場合、キーがゼロであるという理由だけで、ID=4 の行が最初に取得されるとは限りません。for(var key in data)

ただし、何らかの理由で配列の代わりにオブジェクトが本当に必要な場合 (必要ありません!)、いつでも配列をオブジェクトにキャストできます。

echo json_encode((object)$json_values);

補足として、通常、セキュリティ上の理由から、JSON の最上位要素としてオブジェクトを使用することをお勧めします (配列コンストラクターを再定義してから、script タグを使用して最上位配列に何かを含めて、アクセスすることができます)。 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 に答える