在Firefox和Chrome中使用jQuery获取JSON结果的问题(IE8 Works)

时间:2010-04-29 13:52:39

标签: javascript jquery json parsing

我正在尝试使用jQuery解析JSON,而我遇到了问题。使用下面的代码,数据不断返回null:

<!DOCTYPE html>
<html>
  <head>
    <title>JSON Test</title>
  </head>
  <body>
    <div id="msg"></div>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script>
        $.ajax({
          url: 'http://datawarehouse.hrsa.gov/ReleaseTest/HGDWDataWebService/HGDWDataService.aspx?service=HC&zip=20002&radius=10&filter=8357&format=JSON',
          type: 'GET',
          dataType: 'json',
          success: function(data) {
            $('#msg').html(data[0].title); // Always null in Firefox/Chrome. Works in IE8.
          },
          error: function(data) {
            alert(data);
          }
        });
    </script>
  </body>
</html>

JSON结果如下所示:

{"title":"HEALTHPOINT TYEE CAMPUS","link":"http://www.healthpointchc.org","id":"tag:datawarehouse.hrsa.gov,2010-04-29:/8357","org":"HEALTHPOINT TYEE CAMPUS","address":{"street-address":"4424 S. 188TH St.","locality":"Seatac","region":"Washington","postal-code":"98188-5028"},"tel":"206-444-7746","category":"Service Delivery Site","location":"47.4344818181818 -122.277672727273","update":"2010-04-28T00:00:00-05:00"}

如果我用Flickr API URL(http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?)替换我的URL,我会得到一个我能够使用的有效JSON结果。

我已经在JSONLint成功验证了我的JSON,所以我已经完成了我可能做错的想法。

有什么想法吗?

更新:我让客户端将内容类型切换为application / json。不幸的是,我仍然遇到了完全相同的问题。我还更新了我的HTML并包含了我一直在使用的实时网址。

更新2:我刚刚在IE8中试了一下,它运行正常。出于某种原因,它在Firefox 3.6.3或Chrome 4.1.249.1064(45376)中都不起作用。我确实注意到返回数据的错误(开发人员正在返回一组数据,即使是总是会返回单个记录的查询),但它仍然让我感到困惑,为什么它在其他浏览器中不起作用。

请注意,我正在使用本地文件系统上的HTML文件。我认为这可能是一个XSS问题,但这并不能解释Flickr的工作原理。

5 个答案:

答案 0 :(得分:5)

Flickr的API支持JSONP,而您连接的API则不支持。{/ p>

jQuery看到=?,并且知道有一个JSONP回调请求并创建一个。您可以在样本页面使用的jQuery库的第5003行看到它。

所以,你需要改变两件事

  1. 为您的请求添加回调参数。无论您(或您的开发人员)想要称呼它。假设您选择cb - 所以将其添加到AJAX请求中:&cb=?(这样我们让jQuery为我们处理回调的创建)
  2. 让您的开发人员接受这个新参数,并在返回之前用“填充”结果。

答案 1 :(得分:3)

您是否考虑过使用更灵活的$ .ajax?我会在那里拆分它,看看默认的$ .getJSON是否没有为你提供你所需要的。

$.ajax({
   url: 'results.json',
   type: 'GET',
   dataType: 'json',
   success: function(data, status)
   {
       alert(data);
   }
});

将是等效的ajax'parent'实现。尝试四处寻找并查看是否需要设置特定属性。

答案 2 :(得分:3)

内容是否作为“application / json”?

答案 3 :(得分:1)

如果一个url(flickr url)工作,而另一个url(你自己的),我会说问题是你的网址。

看起来你正在使用相对路径,这是你的意图吗?您是否使用 firebug的网络面板来查看请求的内容?

答案 4 :(得分:1)

这是跨域请求错误的情况。 Flickr Works,因为它是JSONP,而另一个url不起作用,因为它不是JSONP启用的。 1.检查URL是否支持JsonP 2.如果没有,请在本地域中创建代理Web服务(与网页相同的域) 3.调用代理Web服务,然后从服务器端调用外部URL。