我有一个简单的getJson请求:
$.getJSON('JsonTest', function(o) {
alert(o.Test);
});
它可以工作,但在Firebug中,“o”永远不会变成一个对象,但保持一个字符串:
{"Test":"Hello"}
如果我做了
eval('(' + o + ')')
它被评估得很好,我唯一能想到的是有某种跨站点脚本问题,但我在我的开发机器上运行所有东西,JsonTest不在localhost:port / Controller / JsonTest < / p>
关于可能出错的任何想法?如何查看是否是跨站点问题?还有其他想法吗?
答案 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。