使用jQuery将Web方法返回的数据作为JSON处理
我对JSON有更多的问题 我正在使用本文中的建议 使用这个,我成功地使用服务器端Web方法来执行AJAX操作 在大多数情况下,我只需要它来做一些事情(例如将事情保存到数据库中),所以不需要对响应做任何事情,但现在我遇到了这样的情况,我无法解决它 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显示的输出
{“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