使用jQuery处理Web方法返回的数据作为JSON

时间:2012-01-13 17:04:38

标签: jquery asp.net vb.net json webmethod

我在使用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

2 个答案:

答案 0 :(得分:1)

我相信错误在你的JSON序列化中的某个地方(因为你看起来JSON看起来已经被序列化了两次)。我们可以获得那样做的代码吗?

答案 1 :(得分:0)

alert(sub.validDetails);

会发生什么