Работа с данными, возвращаемыми веб-методом как JSON с jQuery - PullRequest
0 голосов
/ 13 января 2012

У меня больше проблем с JSON!

Я пользуюсь советом из этой статьи http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

Используя это, мне удалось использовать серверные веб-методы для выполнения действий с AJAX.

В большинстве случаев мне просто нужно что-то делать (например, сохранять вещи в базе данных), поэтому мне не нужно ничего делать с ответом, но сейчас я столкнулся с ситуацией, когда я это делаю, и я не могу разобраться!

Веб-метод возвращает объект JSON, который выглядит следующим образом:

{"d":"[{\"validDetails\":\"True\",\"lateAlert\":\"\",\"LoginResponse\":\"Logging in Jamie at 16:53 please wait\"}]"}

Это вывод из Firebug. Я не уверен, что такое \, но потерпите ...

AJAX-вызов и попытка вывода этого ответа:

$("form").on("submit", function () {
    var LogonObject = new Object;
    LogonObject.password = $('#password').val();
    var LogonData = JSON.stringify(LogonObject);

    $.ajax({
        type: "POST",
        url: "/logIn.aspx/login_try",
        data: LogonData,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            var results = (data.d);
            $('#LoginResponse').html(results); // this is a Div to display the result
        }
    });
});

Если я это сделаю, то #LoginResponse DIV отобразит:

[{"validDetails":"True","lateAlert":"","LoginResponse":"Logging in Jamie at 16:53 please wait"}]

Что выглядит как счастливый объект JSON!

Я не могу понять, как пройти следующий уровень.

т.е. как я могу получить результирующее значение validDetails, lateAlert и т. Д.?

Я пробовал:

$.each(results, function (index, element) {
    $.each(element, function (index, sub) {
      alert(sub);
     });
});

И несколько других вариантов информации, которую я нашел в Google и SO, но кажется, что переменная results рассматривается как строка, а не как массив, и вывод, который я получаю в оповещениях, - это каждый отдельный символ, т.е.

[, {, ", v, a, l, i, d, D... etc

Поэтому я подумал, нужно ли снова преобразовывать results в JSON (хотя я не знаю почему), поэтому я попытался

results = $.parseJSON(data.d)

Но это тоже не сработало.

Я уверен, что мне здесь не хватает чего-то очень простого, но я не могу понять, как это сделать! : - (

РЕДАКТИРОВАТЬ, код, который генерирует ответ (пропуская тонны логики, но это важный бит):

Public Class OutputObject
    Public validDetails, lateAlert, LoginResponse As String 'content of JSON output'
End Class

<System.Web.Services.WebMethod()> _
Public Shared Function login_try(password As String)

    Dim outputArray As New ArrayList

    Dim Login As New OutputObject()
    Login.validDetails = validDetails
    Login.lateAlert = lateAlert
    Login.LoginResponse = LoginResponse
    outputArray.Add(Login)

    serializer = New JavaScriptSerializer()
    Return serializer.Serialize(outputArray)

end function

Ответы [ 2 ]

1 голос
/ 13 января 2012

Я считаю, что ошибка где-то в вашей сериализации JSON (потому что вы, JSON, выглядите так, как будто она была сериализована дважды). Можем ли мы получить код, который делает это?

0 голосов
/ 13 января 2012

что происходит с предупреждением (sub.validDetails);

...