Я не могу получить доступ к данным JSON в jQuery, возвращающемся из Asp.Net WebMethod

0

Я хочу получить доступ к 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. Заранее спасибо.

  • 0
    Когда вы запускаете в режиме отладки, вы используете метод? Кроме того, используйте console.log, а не alert, вы получите более подробную информацию, используя инструменты chrome / firebug
  • 0
    Метод Console.log также отображает undefined . и я уже использую и отслеживаю Javascript и AJAX с помощью Firebug Console.
Теги:

1 ответ

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);
  • 0
    Спасибо @ Darin .. Это работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню