我无法访问从Asp.Net WebMethod返回的jQuery中的JSON数据

时间:2013-11-30 09:32:53

标签: jquery asp.net json

我想将json数据访问到从Asp.Net Web方法返回的jQuery中。 这是我的网络方法

[WebMethod(EnableSession=true)]
public string GetChat() {
    //
    // Code to get data into dataset from database
    //

    // below code to convert dataset to json string
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
    Dictionary<string, object> row;

    foreach (DataRow dr in ds.Tables[0].Rows)
    {
        row = new Dictionary<string, object>();
        foreach (DataColumn dc in ds.Tables[0].Columns)
        {
            row.Add(dc.ColumnName.Trim(), dr[dc]);
        }
        rows.Add(row);
    }

    return serializer.Serialize(rows);
}

这是我的jQuery代码。

$.ajax({
    type: "POST",
    contentType: "application/json",
    url: "../chat.asmx/GetChat",
    dataType: "json",
    success: function (data) {
        alert(data.d[0].Name);
    },
    error: function (result) {
        alert("Error");
    }
});

这是Json Response Sample:

[
{
    "EmployeeId":3,
    "Name":"Khushbu Agarwal",
    "Cnt":2
},
{
    "EmployeeId":6,
    "Name":"Priyanka Jain",
    "Cnt":3
}
]

现在,当我通过语句访问jQuery中的数据时:

alert(data.d[0].Name);

显示Undefined 谁可以帮我这个事。我是json的新手。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

这里有双JSON序列化。不要在WebMethod中进行管道连接。只需返回一个包含数据的对象:

[WebMethod(EnableSession=true)]
public List<Dictionary<string, object>> GetChat() 
{
    List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();

    foreach (DataRow dr in ds.Tables[0].Rows)
    {
        Dictionary<string, object> row = new Dictionary<string, object>();
        foreach (DataColumn dc in ds.Tables[0].Columns)
        {
            row.Add(dc.ColumnName.Trim(), dr[dc]);
        }
        rows.Add(row);
    }

    return rows;
}

然后在成功回调中,例如,如果你想访问第一行:

success: function (data) {
    alert(data.d[0]);
},

如果您想访问第一行的某些特定列名称:

alert(data.d[0]['ColumnName'].Value);