Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jQuery将Web方法返回的数据作为JSON处理_Jquery_Asp.net_Vb.net_Json_Webmethod - Fatal编程技术网

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

使用jQuery将Web方法返回的数据作为JSON处理,jquery,asp.net,vb.net,json,webmethod,Jquery,Asp.net,Vb.net,Json,Webmethod,我对JSON有更多的问题 我正在使用本文中的建议 使用这个,我成功地使用服务器端Web方法来执行AJAX操作 在大多数情况下,我只需要它来做一些事情(例如将事情保存到数据库中),所以不需要对响应做任何事情,但现在我遇到了这样的情况,我无法解决它 Web方法返回一个JSON对象,如下所示: {“d”:“[{\“validDetails\”:“True\”,“lateAlert\”:“\”,“LoginResponse\”:\“16:53登录Jamie,请稍候\“}]” 这是Firebug显示的输出

我对JSON有更多的问题

我正在使用本文中的建议

使用这个,我成功地使用服务器端Web方法来执行AJAX操作

在大多数情况下,我只需要它来做一些事情(例如将事情保存到数据库中),所以不需要对响应做任何事情,但现在我遇到了这样的情况,我无法解决它

Web方法返回一个JSON对象,如下所示:

{“d”:“[{\“validDetails\”:“True\”,“lateAlert\”:“\”,“LoginResponse\”:\“16:53登录Jamie,请稍候\“}]”

这是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”:“16:53登录Jamie,请稍候”}]

在我看来,这就像一个快乐的JSON对象

不过,我不知道如何进入下一级

即,如何获取validDetails、lateAlert等的结果值

我试过:

$.each(results, function (index, element) {
    $.each(element, function (index, sub) {
      alert(sub);
     });
});
和我在谷歌上找到的信息的其他几个变体,但它似乎将
结果
变量视为字符串,而不是数组,我在警报上得到的输出是每个单独的字符,即

[,{,”,v,a,l,i,d,d…等

所以我想知道是否需要将
结果
再次转换为JSON(尽管我不知道为什么),所以我尝试了

results=$.parseJSON(data.d)

但这也不起作用

我肯定我错过了一些非常简单的东西,但我不知道怎么做!:-(

编辑,生成响应的代码(遗漏了大量逻辑,但这是重要的一点):

公共类OutputObject
公共validDetails、lateAlert、LoginResponse作为字符串“JSON输出的内容”
末级
_
公共共享函数登录\尝试(密码为字符串)
将输出阵列变暗为新阵列列表
作为新的OutputObject()登录
Login.validDetails=validDetails
Login.lateAlert=lateAlert
Login.LoginResponse=LoginResponse
outputArray.Add(登录)
serializer=新的JavaScriptSerializer()
返回序列化程序。序列化(输出阵列)
端函数

警报(sub.validDetails)会发生什么情况;

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

我相信错误在JSON序列化中的某个地方(因为您的JSON看起来已经被序列化了两次)。我们可以得到这样做的代码吗?与下面建议的答案相同,
undefined
我在警报中多次得到
undefined
!元素如何。validDetails?删除:contentType:“application/json;charset=utf-8“,来自您的ajax请求。您可能已经了解了一些内容。我已更新了问题。我已尝试跳过返回时的序列化,即将
return serializer.Serialize(outputArray)
更改为
return(outputArray)
删除了我提到的那些奇怪的
`字符,但后来我遇到了一个JS错误,说
无法转换JavaScript参数arg 0[nsIDOMDocumentFragment.appendChild]`我不知道您的代码中哪里有这个错误,请详细说明,并使用alert(data.d)当您不序列化返回值时。很抱歉,当我尝试运行代码时,Firebug窗口会出现此错误。我现在将尝试(data.d),一秒钟……如果我不序列化返回值,Firebug显示的响应是
{“d”:[{“validDetails”:“True”,“lateAlert”:“LoginResponse”:“17:46登录Jamie,请稍候”}}
在我看来绝对正确,但尝试执行
警报(data.d)
会导致Firebug窗口中出现上述错误。这发生在我运行代码后收到返回后。明白了!错误是我没有正确处理输出。
成功:函数(data){var results=(data.d);var validDetails=results[0]。validDetails$(“#LoginResponse”).html(validDetails);}
Works!你说得对,我序列化了两次!:)
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