3

我正在尝试使用纬度和经度来获取城市名称。

谷歌地理编码支持此选项并称为“反向地理编码”。正如示例中所写的那样,我必须对此链接发出获取请求:

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 :

我该如何解决这个问题?

4

4 回答 4

2

简短的回答;你不能:这里不支持 JSONP(或者至少实际上没有记录为支持),请改用Geocoder类。

歌地理编码 API 说:

希望在 JavaScript 应用程序中使用此服务?查看 Google Maps API v3 的 Geocoder 类。

似乎谷歌只提供纯 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 并成功解析它 - 并将处理后的结果返回给您。

于 2012-06-13T10:23:39.807 回答
1

尝试dataType: jsonp,代替dataType: jsomp,.

于 2012-06-13T09:43:16.413 回答
0

尝试在 ajax 设置中添加以下内容:

 contentType: "application/json; charset=utf-8";

编辑 :

这是我在萤火虫中看到的:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "285",
               "short_name" : "285",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Bedford Ave",
               "short_name" : "Bedford Ave",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Williamsburg",
               "short_name" : "Williamsburg",
               "types" : [ "neighborhood", "political" ]
            },
            {
               "long_name" : "Brooklyn",
               "short_name" : "Brooklyn",
               "types" : [ "sublocality", "political" ]
            },
            {
               "long_name" : "New York",
               "short_name" : "New York",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Kings",
               "short_name" : "Kings",
               "types" : [ "administrative_area_level_2", "political" ]
            },

            .
            .
            .
于 2012-06-13T10:06:44.287 回答
0

问题似乎是 ajax 请求没有返回任何内容。大概一个空字符串不是有效的 JSON?

编辑:现在它是!我第一次尝试下面的“小提琴”时,Firebug 报告了对请求的空响应!

于 2012-06-13T10:13:39.187 回答