Javascript jQuery.getJSON()未解析所有对象
我正在使用jQuery的.getJSON函数解析来自Google搜索设备的一组搜索结果。搜索设备有一个xslt样式表,它以JSON数据的形式返回结果,我使用JSONLint和好奇概念的JSON格式化程序对其进行了验证 根据FireBug,完整的结果集是从XMLHTTPRequest返回的,但我尝试转储数据(使用jquery.dump.js),它只解析回第一个结果。它确实成功地获取了所有谷歌搜索协议的内容,但它只看到一个“R”对象(或单个结果) 有人对jQuery的.getJSON有过类似的问题吗?我知道如果JSON无效,它会默默地失败,但正如我所说的,我用几个验证器验证了结果,应该可以继续了 编辑: 单击此链接将显示搜索“google”一词时返回的JSON结果: jQuery只检索第一个“R”对象,即使所有“R”对象都是同级对象。您可以尝试使用自己的“jsonpCallback”函数执行“getJSON”。如果您调用的API的响应看起来像一个逗号分隔的JSON表达式列表,那么jQuery自动构造的回调函数将只看到第一个 换句话说,如果API返回Javascript jQuery.getJSON()未解析所有对象,javascript,jquery,json,getjson,Javascript,Jquery,Json,Getjson,我正在使用jQuery的.getJSON函数解析来自Google搜索设备的一组搜索结果。搜索设备有一个xslt样式表,它以JSON数据的形式返回结果,我使用JSONLint和好奇概念的JSON格式化程序对其进行了验证 根据FireBug,完整的结果集是从XMLHTTPRequest返回的,但我尝试转储数据(使用jquery.dump.js),它只解析回第一个结果。它确实成功地获取了所有谷歌搜索协议的内容,但它只看到一个“R”对象(或单个结果) 有人对jQuery的.getJSON有过类似的问题吗
{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": ...}], ...}
或者,您也可以始终使用$.ajax函数,然后简单地评估生成的JSON。我意识到这通常是不明智的,但因为你可以确定谷歌搜索设备不会注入任何类型的攻击,所以它可以在这种情况下使用
eval()
,在这种情况下根本没有帮助。他必须实现一个特殊的JSON解析器,这似乎不值得。是的,对结果数据的求值与jQuery已经在做的事情是一样的——它会将每个“R”元素覆盖到下一个结果,只留下一个。我重新使用XSLT,按照基本顺序命名每个“R”元素,而不是仅仅称它们为“R”,现在它工作正常了