こんにちは、次のJSONオブジェクトがあります。
[
{
"comments":[
{
"created_at":"2011-02-09T14:42:42-08:00",
"thumb":"xxxxxxx",
"level":1,"id":214,
"user_id":41,
"parent_id":213,
"content":"<p>xxxxxx</p>",
"full_name":"xx K"
},
{
"created_at":"2011-02-09T14:41:23-08:00",
"thumb":"xxxxxxxxxxxxx",
"level":0,
"id":213,
"user_id":19,
"parent_id":null,
"content":"<p>this is another test</p>",
"full_name":"asd asd asd asd asd"
}
],
"eee1":"asdadsdas",
"eee2":"bbbbb"
}
]
これは$.ajax
リクエスト、成功しました。
success: function (dataJS) {
console.log(dataJS);
console.log(dataJS[eee1]);
console.log(dataJS.comments);
}
問題は、dataJSがコンソールに正しく表示されても、JSONオブジェクトのアイテムにアクセスできないことです。アイデア?
ありがとう
これは、ベースオブジェクトも配列であるためです。
console.log(dataJS[0].comments[0]);
それはうまくいくと思う
あなたが戻ってきたJSONは実際には配列そのものなので、...
dataJS[0].comments[0].created_at
2011-02-09T14:42:42-08:00
など...
dataJS
とcomments
はどちらも配列であり、適切な要素にアクセスするにはインデックスが必要です。
返されるオブジェクトはそれ自体が配列なので、最初のコメント(例として)にアクセスするには、次のようにアクセスします。
dataJS[0].comments[0]
console.log(dataJS);
console.log(dataJS[0].eee1);
console.log(dataJS[0].comments[0]);
このようなことをしてください:-
var dataJS = [{"comments":[{"created_at":"2011-02-09T14:42:42-08:00","thumb":"xxxxxxx","level":1,"id":214,"user_id":41,"parent_id":213,"content":"<p>xxxxxx</p>","full_name":"xx K"},{"created_at":"2011-02-09T14:41:23-08:00","thumb":"xxxxxxxxxxxxx","level":0,"id":213,"user_id":19,"parent_id":null,"content":"<p>this is another test</p>","full_name":"asd asd asd asd asd"}],"eee1":"asdadsdas","eee2":"bbbbb"}];
var created_at = dataJS[0].comments[0].created_at;
はい、他の人が述べたように、JSONは実際には(単一のオブジェクトの)配列です。したがって、インデックスを参照する必要があります。
興味深いことに(私にとって)、結果の文字列はJSONとして正常に検証されます。これまでは有効なJSONであると想定していたため、オブジェクト(つまり、{})である必要がありました。
AjaxリクエストでdataTypeを「JSON」として指定する必要があります。以下のようにしたことをユーザーにしてください。
$.ajax({
url: $('#frmAddCourse').attr('action'),
type: 'POST',
data: $('#frmAddCourse').serialize(),
dataType: 'JSON',
success: function (data){
Materialize.toast(data['state'],2000);
},
error:function(){
Materialize.toast(errorMessage,2000);
}
});