$ .getJSON不解析回调中的对象

时间:2010-07-02 01:31:55

标签: c# jquery json

我有一个简单的getJson请求:

$.getJSON('JsonTest', function(o) {
alert(o.Test);
});

它可以工作,但在Firebug中,“o”永远不会变成一个对象,但保持一个字符串:

{"Test":"Hello"}

如果我做了

eval('(' + o + ')')

它被评估得很好,我唯一能想到的是有某种跨站点脚本问题,但我在我的开发机器上运行所有东西,JsonTest不在localhost:port / Controller / JsonTest < / p>

关于可能出错的任何想法?如何查看是否是跨站点问题?还有其他想法吗?

1 个答案:

答案 0 :(得分:2)

您的JsonTest服务是否可能“双重转义”被回送的json?如:

"{\"Test\":\"Hello\"}"

既然你有萤火虫,你可以看一下响应并粘贴它显示的原始文本吗?

如果您的服务方法返回一个字符串,并且您正在进行自己的序列化,那么情况确实如此。我最近跑到这里。无论如何,使用“双引号”(或双重包裹,双重转义,无论你想要什么)json回来,$ .getJSON()只有eval()一次,将"{\"Test\":\"Hello\"}"转换为{{ 1}},确实还需要额外的eval()。

另外,不要使用eval()。使用{"Test":"Hello"}。您可以包含来自http://json.org/的json2.js,JSON.parse()将使用浏览器的本机json解析功能,或者如果浏览器本身不执行,则返回json2.js。