我正在尝试使用纬度和经度获取城市名称。
Google 地理编码支持此选项并称为“Reverse geocoding”。 正如示例中所写,我必须对此链接发出获取请求:
http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=true_or_false
它返回我的json数组,你可以试试。
我如何在 jquery 中解析这个 json?
我试着这样做:
$.ajax({
url: 'http://maps.googleapis.com/maps/api/geocode/json',
type: 'get',
data: {
'latlng':lat+","+longit,
'sensor': false
},
dataType: 'jsonp',
success: function(result){
console.log(results)
},
error: function(xhr,ajaxOptions,thrownError){
console.log(xhr.status);
console.log(ajaxOptions);
console.log(thrownError);
}
})
我得到了这个数组,但是无法解析。它说:
Uncaught SyntaxError: Unexpected token :
我该如何解决这个问题?
最佳答案
简答;你不能:这里不支持 JSONP(或者至少实际上没有记录为受支持),请使用 Geocoder类。
Looking to use this service in a JavaScript application? Check out the Geocoder class of the Google Maps API v3.
Google 似乎只提供纯 JSON,由于同源策略,您无法在自己的页面中解析它 - 但如果您是,则可以使用它。在没有该限制的另一台服务器上运行的 php 应用程序。因此,如果您想在网页上使用它,可以使用他们的 Geocoder 类 - 无论如何它都会为您完成解析工作。
--
当您使用 dataType="jsonp"时,jQuery 会尝试通过创建 SCRIPT 元素并将 src 属性设置为查询字符串来加载结果。然后浏览器最终获取返回的 json,并尝试将其解析为一个独立的 javascript 文件 - 这就是失败的原因。
问题是 JSON 不是有效的纯独立 javascript:例如,返回的 JSON 字符串:
{ "results" : [ { "address_components" : [
... 无法解析 - 这就是导致错误的原因。如果是,另一方面,
var foo = { "results" : [ { "address_components" : [
或
callback({ "results" : [ { "address_components" : [ ... } )
那么 它将是有效的 javascript。后者是 jsonp 实际上依赖于返回的东西。
最重要的是,您正在取回有效的 JSON,但由于同源策略,您无法通过 XmlHttpRequest 直接访问它;并且因为它不是带有函数的 JSONP,所以您不能通过 JSONP 所依赖的 SCRIPT 后门使用它来解决同源问题。在网页上使用它的唯一选择是使用 Google 为您提供的类 - 因为它们也来自 Google 站点,它们可以访问 JSON 并成功解析它 - 并返回处理过的结果返回给您。
关于javascript - 如何从谷歌地理编码解析 json (jquery)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11012196/