如何从谷歌地理编码解析json(jquery)?

时间:2012-06-13 09:41:55

标签: javascript jquery google-code

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

Google地理编码支持此选项并称为“Reverse geocoding”。 正如在示例中所写,我必须向此链接发出get请求:

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);
      }

  })

我得到这个数组,但无法解析。它说:

  

未捕获的SyntaxError:意外的令牌:

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

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

Google Geocoding APIs say:

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

似乎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并成功解析它 - 并返回已处理的结果还给你。

答案 1 :(得分:1)

尝试使用dataType: jsonp,代替dataType: jsomp,

答案 2 :(得分:0)

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

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

编辑

这是我用firebug看到的:

{
   "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" ]
            },

            .
            .
            .

答案 3 :(得分:0)

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

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

相关问题