我在使用JSON时遇到了更多问题!
我正在使用本文http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/
中的建议使用这个我已经设法使用服务器端Web方法来执行AJAX操作。
在大多数情况下,我只需要它来做东西(例如将内容保存到数据库中)所以不需要对响应做任何事情,但现在我遇到了我做的情况,而我无法解决这个问题!
Web方法返回一个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
答案 0 :(得分:1)
我相信错误在你的JSON序列化中的某个地方(因为你看起来JSON看起来已经被序列化了两次)。我们可以获得那样做的代码吗?
答案 1 :(得分:0)
alert(sub.validDetails);
会发生什么