我遇到了jQuery / Ajax / JSON的问题。我正在使用jQuery ajax这样的帖子......
$.ajax({
type: "POST",
dataType: "json",
url: "someurl.com",
data: "cmd="+escape(me.cmd)+"&q="+q+"&"+me.args,
success: function(objJSON){
blah blah...
}
});
我的理解是这将返回一个JavaScript JSON对象? ajax帖子产生的文本就是这个(我相信这是有效的JSON)......
{
"student":{
"id": 456,
"full_name": "GOOBER, ANGELA",
"user_id": "2733245678",
"stin": "2733212346"
},
"student":{
"id": 123,
"full_name": "BOB, STEVE",
"user_id": "abc213",
"stin": "9040923411"
}
}
我似乎无法弄清楚如何解析jQuery ajax帖子返回的JSON对象...基本上我想循环并让每个学生返回一个div,就像这样......
$("<div id=\"" + student.id + "\">" + student.full_name + " (" + student.user_id + " - " + student.stin + ")</div>")
我似乎无法弄明白该怎么做......
谢谢!
答案 0 :(得分:29)
您的JSON对象不正确,因为它具有多个具有相同名称的属性。你应该返回一组“学生”对象。
[
{
"id": 456,
"full_name": "GOOBER ANGELA",
"user_id": "2733245678",
"stin": "2733212346"
},
{
"id": 123,
"full_name": "BOB, STEVE",
"user_id": "abc213",
"stin": "9040923411"
}
]
然后你可以这样迭代它:
for (var i = 0, len = objJSON.length; i < len; ++i) {
var student = objJSON[i];
$("<div id=\"" + student.id + "\">" + student.full_name + " (" + student.user_id + " - " + student.stin + ")</div>")...
}
答案 1 :(得分:4)
JSON有一个问题 - 外部花括号应该是方括号,因为你想要一个列表,而不是一个地图(又名对象)。如果地图中的所有对象都具有相同的键,则它将无法正确解析 - 最后一个值将覆盖大多数解析器下的前一个。
你想:
[
{
"id": 456,
"full_name": "GOOBER, ANGELA",
"user_id": "2733245678",
"stin": "2733212346"
},
{
"id": 123,
"full_name": "BOB, STEVE",
"user_id": "abc213",
"stin": "9040923411"
}
]
或者使用不同键的地图:
{
"456":{
"id": 456,
"full_name": "GOOBER, ANGELA",
"user_id": "2733245678",
"stin": "2733212346"
},
"123":{
"id": 123,
"full_name": "BOB, STEVE",
"user_id": "abc213",
"stin": "9040923411"
}
}
你最好使用$ .getJSON,这是$ .ajax的专用版本。
$.getJSON("someurl.com", function(students) {
$.each(students, function() {
$("<div id=\"" + student.id + "\">" + student.full_name + " (" + student.user_id + " - " + student.stin + ")</div>").appendTo($container);
});
});
答案 2 :(得分:3)
您目前使用的JSON不起作用,因为第二个“学生”有效地替换了第一个,因为这些只是对象中的属性。
如果您可以控制JSON输出,请将其更改为:
{
"student":[{
"id": 456,
"full_name": "GOOBER, ANGELA",
"user_id": "2733245678",
"stin": "2733212346"
},{
"id": 123,
"full_name": "BOB, STEVE",
"user_id": "abc213",
"stin": "9040923411"
}]
}
然后你有一个可以循环的数组:
for(var i=0; i<objJSON.student.length; i++) {
...objJSON.student[i]...
}
答案 3 :(得分:1)
var data = '[
{
"id": 456,
"full_name": "GOOBER, ANGELA",
"user_id": "2733245678",
"stin": "2733212346"
},
{
"id": 123,
"full_name": "BOB, STEVE",
"user_id": "abc213",
"stin": "9040923411"
}
]';
$.each(data, function(index, val) {
alert(val.id);
alert(val.full_name);
alert(val.user_id);
alert(val.stin);
})