【发布时间】:2012-01-13 17:04:37
【问题描述】:
我在使用 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
【问题讨论】:
-
我相信错误出现在您的 JSON 序列化中(因为您的 JSON 看起来已经被序列化了两次)。我们能得到执行此操作的代码吗?
-
与下面建议的答案相同,
undefined
标签: jquery asp.net vb.net json webmethod