Я хочу получить доступ к json-данным в jQuery, возвращаясь из Web-метода Asp.Net. Это мой веб-метод
[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:
[
{
"EmployeeId":3,
"Name":"Khushbu Agarwal",
"Cnt":2
},
{
"EmployeeId":6,
"Name":"Priyanka Jain",
"Cnt":3
}
]
Теперь, когда я получаю доступ к данным в инструкции jQuery:
alert(data.d[0].Name);
Он отображает Undefined
Может ли кто-нибудь помочь мне в этом. Я новичок в json. Заранее спасибо.
Здесь у вас двойная сериализация 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);
undefined
. и я уже использую и отслеживаю Javascript и AJAX с помощью Firebug Console.