1

我正在尝试将 Google Elevation API 与 JQuery 的 getJSON 函数一起使用。

我正在使用使用 JSONP 的这段代码:

jQuery.getJSON("http://maps.googleapis.com/maps/api/elevation/json?locations=23.444,45.4545&sensor=false&jsoncallback=?", function(json){
    alert("a");
});

我可以在 Firebug 中看到 GET 请求已正确发送,并且我收到了来自 Google 的正确响应:

{
  "status": "OK",
  "results": [ {
    "location": {
      "lat": 23.4440000,
      "lng": 45.4545000
    },
    "elevation": 816.7996216
  } ]
}

但是我从来没有警报,我从 Firebug 得到这个错误:

invalid label
"status": "OK",\n

我正在使用 Google Maps API v2,所以我使用内置方法。

有什么方法可以通过 AJAX 请求使用 Google Elevation API 获取海拔,而无需创建代理?

谢谢你的帮助。

本杰明

4

4 回答 4

2

该 API 不支持 JSONP,它只返回 JSON...所以是的,在这种情况下您需要代理。

需要明确的是,正确的响应应该是这样的:

someFunction({
  "status": "OK",
  "results": [ {
    "location": {
      "lat": 23.4440000,
      "lng": 45.4545000
    },
    "elevation": 816.7996216
  } ]
})

jQuery 替换callback=?callback=someFunction,但 google 不使用此参数,因为此服务不支持 JSONP ......所以问题是你有效地这样做了:

<script type="text/javascript">
{
  "status": "OK",
  "results": [ {
    "location": {
      "lat": 23.4440000,
      "lng": 45.4545000
    },
    "elevation": 816.7996216
  } ]
}
</script>

这会导致错误,因为这不是有效的 JavaScript……你会得到一个无效的标签错误。如果它在那里有函数包装器,它将有效的,它会执行 jQuery 制作的函数(来自你的success回调)。

于 2010-10-11T10:55:42.163 回答
1

您应该使用 JavaScript API 中的 G̶e̶o̶L̶o̶c̶a̶t̶i̶o̶n̶ ElevationService 类。不需要代理。

http://code.google.com/apis/maps/documentation/javascript/reference.html#ElevationService

于 2010-10-11T14:03:57.033 回答
1

Google 海拔 API 不支持 JSONP(感谢 Nick Craver 的解释),我无法使用仅适用于 v3 Google Maps API 的 ElevationService。

所以我决定使用其他网络服务来获取海拔:

http://www.geonames.org/export/web-services.html#astergdem

示例:http ://ws.geonames.org/astergdemJSON?lat=X&lng=Y&callback= ?

该网络服务支持 JSONP,因此可以轻松地与 JQuery 和 getJSON 方法一起使用。

本杰明

于 2010-10-14T10:18:31.440 回答
0

正如@Chris Broadfoot 所说,API v3 中有一个特殊的类这里有一个更好的例子https://developers.google.com/maps/documentation/javascript/elevation 您不需要处理 JSONP 或其他服务。

于 2014-11-16T18:40:37.940 回答