I'm trying to decode a JSON with jQuery. Here's what I get (for instance a class, here with one student):
"{"Students":[{"Name":John,"Grade":17,}],"TotalClass":17,"TotalCount":1,}"
here's what I do:
$j.ajax({
type: 'POST',
url: 'class.aspx/getClass',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (msg) {
$j.each(msg, function (index, element) {
alert(element.TotalClass);
});
},
});
It keeps saying undefined in the alert (but I recieve the right JSON). Any idea what I'm doing wrong?
{"Students":[{"Name":John,"Grade":17,}],"TotalClass":17,"TotalCount":1,}
is not valid JSON !
Assuming you have a valid JSON like this
{
"Students": [
{
"Name": "John",
"Grade": "17"
}
],
"TotalClass": " 17",
"TotalCount": "1"
}
You can access the values like this
alert("TotalClass : "+msg.TotalClass);
//loop thru students
$.each(msg.Students,function(index,item){
alert(item.Name+ " - "+item.Grade)
});
Working sample : http://jsfiddle.net/ncbLF/5/
Use jsonlint to validate JSON
So your code can be simplified to
$.getJSON("class.aspx/getClass",function(msg){
alert("TotalClass : "+msg.TotalClass);
$.each(msg.Students,function(index,item){
alert(item.Name+ " - "+item.Grade)
});
});
contentType is the type of the data sent to the server, not from. Remove that.
The JSON you included in the question. Is that the exact JSON the server returns? Because if it is, you don't need the $.each. You have an object, you should only need $.each to loop though an array of objects.
So, just try alert(msg.TotalClass).
Also, that JSON is invalid. You have an extra , after TotalCount, and after Grade. Also, John should be in double quotes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With