Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery.getJSON()未解析所有对象_Javascript_Jquery_Json_Getjson - Fatal编程技术网

Javascript jQuery.getJSON()未解析所有对象

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有过类似的问题吗

我正在使用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返回

{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。我意识到这通常是不明智的,但因为你可以确定谷歌搜索设备不会注入任何类型的攻击,所以它可以在这种情况下使用


如果你能发布一个回复的样本,那会有很大帮助。你能为你的问题添加一个样本回复吗?好的,我添加了一个链接,让你可以从谷歌搜索设备获得一些JSON结果。起初我想我不知道我是否想在这里公开发布,但后来我意识到这只是你可以从大学网站上获取的搜索结果数据。请看我的更新答案-你不能期望它与“R”这样的多个独立值一起工作。它必须是一个数组。好吧,我实际上并没有使用JSONP,因为Google搜索设备没有提供执行JSONP的能力,所以我只是通过一个简单的PHP代理(诱使jQuery认为它来自本地服务器)获取原始JSON数据。我将在上面发布一个返回数据的示例。啊,这很有意义。我猜我(愚蠢地)认为JSON被JS Lint/其他验证器“验证”意味着它很好,我不必去想,哈哈。有意思的是,不能有两个元素具有相同的密钥。有趣的是,验证器至少没有发出警告,因为检测到它正在发生并不困难。是的,也许我会给JS Lint人员发电子邮件,让他们知道它正在发生。如果他只是使用
eval()
,在这种情况下根本没有帮助。他必须实现一个特殊的JSON解析器,这似乎不值得。是的,对结果数据的求值与jQuery已经在做的事情是一样的——它会将每个“R”元素覆盖到下一个结果,只留下一个。我重新使用XSLT,按照基本顺序命名每个“R”元素,而不是仅仅称它们为“R”,现在它工作正常了