あなたのコードはまったく問題ありません。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));