jQuery .getJSON()不解析所有对象

时间:2010-05-19 16:46:01

标签: javascript jquery json getjson

我正在使用jQuery的.getJSON函数来解析来自Google Search Appliance的一组搜索结果。 Search Appliance有一个xslt样式表,它将结果作为JSON数据返回,我使用JSONLint和Curious Concept的JSON格式化程序验证了这些数据。

根据FireBug,从XMLHTTPRequest返回完整的结果集,但我尝试转储数据(使用jquery.dump.js),它只会解析第一个结果。它确实成功获得了所有Google搜索协议的内容,但它只能看到一个“R”对象(或单个结果)。

有没有人遇到类似jQuery的.getJSON问题?我知道如果JSON无效,它喜欢静默失败,但就像我说的那样,我用几个验证器验证了结果,这应该是好的。

编辑: 点击此链接会显示为搜索“google”一词而返回的JSON结果:http://bigbird.uww.edu/search?client=json_frontend&proxystylesheet=json_frontend&proxyrefresh=1&output=xml_no_dtd&q=google

jQuery只检索第一个“R”对象,即使所有“R”对象都是兄弟姐妹。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用自己的“jsonpCallback”函数自行执行“getJSON”。如果您调用的API的响应看起来像JSON表达式的逗号分隔列表,则jQuery自动构造的回调函数将只看到第一个。

换句话说,如果API返回

{something: "foo", whatever:23}, {something: "bar", whatever, 32}

然后在响应脚本块中结束的是:

magicJqueryCallback({something: "foo", whatever:23}, {something: "bar", whatever, 32})

jQuery回调被声明为只有一个参数,它分配给伪XHR对象的“data”元素。

或者,如果你可以控制XSLT代码的作用,你可以让它在一组方括号中包装响应列表,然后再转到jQuery:

[{something: "foo", whatever:23}, {something: "bar", whatever, 32}]

如果您的XSLT生成了它,它(我希望)可以正常使用getJSON。

修改好的,我现在看到你的问题了。

您的JSON响应在外部对象中包含“R”的多个值。这不会起作用:如果“R”是一个列表,它需要有一个单个值,该值是一个数组。

  {"GSP": ..., "R":[{"U": ... }, {"U": ... }, {"U": ...}], ...}

答案 1 :(得分:0)

或者你总是可以使用$ .ajax函数然后简单地评估生成的JSON。我意识到这通常是不明智的,但是因为您可以确定Google Search Appliance不会注入任何类型的攻击,因此可以在这种情况下使用。