我正在关注this link以构建客户端转发器。
根据以上链接从Json键值对中检索值,我们可以使用result [i] .property,例如
for (var post in msg)
{
var x= msg[post].Date;
alert(x);
}
这里x
从Json字符串返回日期。当我尝试对我的数据使用相同的内容时,它始终返回undefined
。我试图弹出一个alert(msg.d)
,显示一个包含我所有数据的好Json字符串。但是当我尝试msg[post].Date(property name)
时,它总是返回undefined
。
请帮助..
提前致谢。
更新
从后端我返回一个通用列表,然后使用以下代码将其转换为Json。
public static string ConvertToJSON(this object obj) {
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, obj);
string jsonobj = Encoding.Default.GetString(ms.ToArray());
ms.Dispose();
return jsonobj;
}
然后我将返回的Json附加到stringbuilder并将其返回到Jquery ajax方法。返回的Json看起来像一个字符串,而不是一个对象,因此我无法从Json键值对中获取任何值.. < / p>
答案 0 :(得分:1)
如果您将此消息添加到ajax中,该消息会有什么帮助吗?
dataFilter: function(data)
{
var msg;
if (typeof (JSON) !== 'undefined' &&
typeof (JSON.parse) === 'function')
msg = JSON.parse(data);
else
msg = eval('(' + data + ')');
if (msg.hasOwnProperty('d'))
return msg.d;
else
return msg;
},
请注意,然后将其处理为msg,而不是msg.d,如下所示:
success: function(msg)
{
SaveSuccess(msg);
},
答案 1 :(得分:1)
<强>更新强>
听起来你是在服务器端对数据进行双重序列化,返回一个JSON字符串,该字符串被序列化为JSON本身。当它到达客户端并且jQuery自动反序列化第一层JSON时,你仍然留下你手动构建的JSON字符串。
您应该返回List<T>
作为服务方法的返回值,并让框架处理JSON序列化。
原始答案:
假设对象仍然包含在ASP.NET AJAX's ".d" wrapper中,正如您暗示的那样:
for (var post in msg.d) {
var x = msg.d[post].Date;
alert(x);
}
或者,传统的循环,可能更直接:
for (var i = 0; i < msg.d.length; i++) {
var x = msg.d[i].Date;
alert(x);
}
答案 2 :(得分:0)
在我看来,就像你开始使用一系列对象一样,使用你的样本进行以下工作:
messages = [{"AnsNo":0,"Answer":"","Category":"Help Centre.Mortgages.Existing customers","ClickURL":null,"ID":7,"Question":"How do I re-mortgage to you?","RecNo":0,"ValidFrom":"\/Date(-62135596800000+0000)\/","ValidUntill":"\/Date(-62135596800000+0000)\/"}]
for(i in messages)
{
message = messages[i];
//Says "Help Centre.Mortgages.Existing customers"
alert(message.Category)
//To get all key/value pairs
for(key in message)
{
//Alerts all key value pairs one by one
alert("Key:" + key + ", Value:" + message[key]);
}
}