【问题标题】:$.getJSON not parsing object in callback$.getJSON 不在回调中解析对象
【发布时间】:2010-07-02 01:31:55
【问题描述】:

我有一个简单的 getJson 请求:

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

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

{"Test":"Hello"}

如果我做一个

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

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

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

【问题讨论】:

    标签: c# jquery json


    【解决方案1】:

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

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

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

    如果您的服务方法返回一个字符串,并且您正在执行自己的序列化,那么肯定是这种情况。我最近遇到了这个。无论如何,随着“双引号”(或双引号,双转义,无论你想怎么称呼它)json 回来,$.getJSON() 只 eval() 一次,将"{\"Test\":\"Hello\"}" 变成{"Test":"Hello"},这确实仍然需要额外的 eval()。

    另外,不要使用 eval()。使用JSON.parse()。您可以包含来自http://json.org/ 的 json2.js,并且 JSON.parse() 将使用浏览器的原生 json 解析能力,或者如果浏览器本身没有解析,则使用 json2.js。

    【讨论】:

    • @Reigel:感谢您对更改的提醒。
    • 你是对的!哦,我的上帝,整个下午都在这!我正在做一个 Public JsonResult() ... return Json(TestJson) ... 并且在两者之间是手动序列化(长篇故事),所以当我调用 Json 时它会再次序列化。哇,整个下午都在这。这解释了为什么我的其他 JsonResults 工作正常。哇,再次感谢。
    • 你很幸运,你只花了 1 个下午的时间,哈哈。我想我花了 2 ;-)
    猜你喜欢
    • 2023-03-04
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多