1

MySQL データベースのデータから JSON オブジェクトを生成する PHP があります。

$addressData = mysql_query("SELECT * FROM address WHERE ContactID = $contactID")or  die("<br/><br/>".mysql_error());

while($r = mysql_fetch_assoc($addressData)){
    $rows[] = array('data' => $r);
}

// now all the rows have been fetched, it can be encoded
echo json_encode($rows);

これにより、次の JSON オブジェクトが生成されます。

[
  {"address":
    {"AddressID":"10011","AddressType":"Delivery","AddressLine1":"4 Caerleon Drive","AddressLine2":"Bittern","AddressLine3":"","CityTown":"Southampton","County":"Hampshire","PostCode":"SO19 5LF","Country":"United Kingdom","ContactID":"10011"}},
  {"address":
    {"AddressID":"10012","AddressType":"Home","AddressLine1":"526 Butts Road","AddressLine2":"Sholing","AddressLine3":"","CityTown":"Southampton","County":"Hampshire","PostCode":"SO19 1DJ","Country":"England","ContactID":"10011"}}
]

それをAjaxで受け取り、次のように実行すると:

$.each(data, function(key, val) {
  string =string + "Key: " + key + " Value:" + val + "<br />";
});

以下を出力します。

キー: 0 値:[オブジェクト オブジェクト]

キー: 1 値:[オブジェクト オブジェクト]

キー内0および1データ内のオブジェクトにアクセスする方法についてのアイデアはありますか?

4

2 に答える 2

2

これは、オブジェクトのデフォルトの toString 実装が、String オブジェクトに連結するときに "[object Object]" になるためです。通常どおり val オブジェクトのフィールドにアクセスできます。次に例を示します。

val.data.AddressID

このような:

$.each(data, function(key, val) {
  string += "Key: " + key + " Value:" + val.data.AddressID + "<br />";
});

上記のループの val は JSON コードの {"data": ...} 部分であることに注意してください。そのため、val.data を指定する必要があります。内部のアドレスデータの一部にアクセスします。

また、単純にデータのネスト レベルを削除すると、次のような JSON レイアウトになります。

[
    {"AddressID":"10011","AddressType":"Delivery","AddressLine1":"4 Caerleon Drive","AddressLine2":"Bittern","AddressLine3":"","CityTown":"Southampton","County":"Hampshire","PostCode":"SO19 5LF","Country":"United Kingdom","ContactID":"10011"},
    {"AddressID":"10012","AddressType":"Home","AddressLine1":"526 Butts Road","AddressLine2":"Sholing","AddressLine3":"","CityTown":"Southampton","County":"Hampshire","PostCode":"SO19 1DJ","Country":"England","ContactID":"10011"}
]

この PHP コードの使用:

while($r = mysql_fetch_assoc($addressData)){
    $rows[] = $r;
}

そして、次のようにループ内のアドレス データ フィールドにアクセスできます。

$.each(data, function(key, address) {
  string += "Key: " + key + " Value:" + address.AddressID + "<br />";
});
于 2012-09-11T08:31:54.427 に答える
1

私はあなたのjsonのレイアウトを変更します。ネストは必要ありません。試す:

[
    {"AddressID":"10011","AddressType":"Delivery",...},
]

次に、 key => val を使用して戻り値を配列として反復できます。ここでvalオブジェクトになります。現在、val必要なオブジェクトを保持しているオブジェクトであるためです...

于 2012-09-11T08:36:44.207 に答える