3
<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<script type="text/javascript">
    var url = "https://maps.googleapis.com/maps/api/place/search/json?key=AIzaSyBnEjp_CRcL_APx4mMsmuke9SV1PWZfnww&sensor=false&location=26.526437,-80.163004&radius=500&keyword=Physican%27s+Weight+Loss+Centers&types=";
    jQuery.getJSON(url, function (data) {
        alert(data);
    });

</script>
</body>
</html>

运行上面的代码时,我没有收到警报窗口。URL 没有任何回调函数。任何帮助或有用的链接如何使用 jQuery 或 Javascript 从 JSON URL 解析/检索数据将不胜感激。

4

3 回答 3

2

谷歌为该请求返回的标头不允许跨域查询。

HTTP/1.1 200 OK
status: 200 OK
version: HTTP/1.1
cache-control: private
content-encoding: gzip
content-length: 1932
content-type: application/json; charset=UTF-8
date: Mon, 24 Sep 2012 12:27:10 GMT
server: mafe
vary: Accept-Language
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block

所以你真正需要做的是在你的服务器中有一些代码获取数据,然后传递它,这样你就不会违反跨域规则。

要么,要么看看谷歌是否提供了 API 的 JSONP 版本。

于 2012-09-24T12:28:20.857 回答
2

我假设这是跨域的。在这种情况下,下面的 jQuery 应该可以工作:

$.ajax(url, {
    crossDomain: true,
    dataType: 'jsonp'
}).success(function(data) {
    alert(data);
}).fail(function() {
    alert('fail');
});

注意:jQuery 不会让您访问跨域请求的 http 状态代码,它只会在 200 响应时触发 .success(),在非 200 响应时触发 .fail() - 例如,您将难以处理404 与 403 客户端。如果您想进行更好的控制,请考虑使用 jquery-jsonp 之类的东西。

另外值得注意的是:使用浏览器调试器(firebug/whatever),这至少应该告诉您 ajax 请求返回什么响应 - 很可能是您的请求得到非 200 - 这将是一个失败案例jQuery。在这种情况下,你能做的有点有限。

一些背景阅读:http ://en.wikipedia.org/wiki/Same_origin_policy

于 2012-09-24T12:36:10.937 回答
1

请参阅 Paul Tregoing 的帖子,了解正在发生的事情以及如何绕过它。

但是,在这种情况下,实际上有一个适用于 Google 地图的 JavaScript API(包括您似乎正在使用的 Places)。你可以在这里查看

于 2012-09-24T12:29:44.810 回答