У меня больше проблем с 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