7

jQueryでJSONをデコードしようとしています。これが私が得るものです(例えば、ここでは1人の学生がいるクラス):

"{"Students":[{"Name":John,"Grade":17,}],"TotalClass":17,"TotalCount":1,}"

これが私がすることです:

$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);
        });
    },
});

アラートで未定義と言い続けます(ただし、正しいJSONを受け取ります)。私が間違っていることについて何か考えはありますか?

4

3 に答える 3

8
{"Students":[{"Name":John,"Grade":17,}],"TotalClass":17,"TotalCount":1,}

有効なJSONではありません!

JSONあなたがこのような有効なものを持っていると仮定します

{
    "Students": [
        {
            "Name": "John",
            "Grade": "17"
        }
    ],
    "TotalClass": " 17",
    "TotalCount": "1"
}

このような値にアクセスできます

alert("TotalClass : "+msg.TotalClass);
//loop thru students
$.each(msg.Students,function(index,item){
   alert(item.Name+ " - "+item.Grade)
}); 

作業サンプル: http: //jsfiddle.net/ncbLF/5/

jsonlintを使用してJSONを検証します

したがって、コードを次のように簡略化できます。

$.getJSON("class.aspx/getClass",function(msg){

    alert("TotalClass : "+msg.TotalClass);
    $.each(msg.Students,function(index,item){
        alert(item.Name+ " - "+item.Grade)
    });
});
于 2012-06-13T15:50:48.523 に答える
2

警告してみてください

$j.each(msg, function (key, element) {
    alert(key); // output: Students, TotalClass..
    alert(element); //output: [{"Name":John,"Grade":17,}, 17..
});

ノート

dataType: 'json'追加の解析作業は必要ないと思うように設定し、JSONにエラーがある場合、それがサーバーから作成されたものなのか、元々送信されたものなのかわかりません。

そして、あなたはラインを必要としません

contentType: 'application/json; charset=utf-8',

有効なjsonは次のようになります。

{
    "Students": [
        {
            "Name": "John",
            "Grade": "17"
        }
    ],
    "TotalClass": " 17",
    "TotalCount": "1"
}
于 2012-06-13T15:46:14.867 に答える
2

contentTypeからではなく、サーバーに送信されるデータのタイプです。それを削除します。

質問に含めたJSON。それはサーバーが返す正確なJSONですか?もしそうなら、あなたは必要ないからです$.each$.eachオブジェクトがあります。オブジェクトの配列をループするだけで済みます。

だから、試してみてくださいalert(msg.TotalClass)

また、そのJSONは無効です。,の後TotalCountに、およびの後に余分なものがありGradeます。また、John二重引用符で囲む必要があります。

于 2012-06-13T15:47:02.167 に答える