3

Google Places API 现已全面推出。我正在尝试使用 jQuery 中的 .ajax() 调用来调用 Google Places。我不断返回的错误是Uncaught SyntaxError: Unexpected token :

我正在使用 jQuery 1.5.2。我也尝试过 1.5.1,但结果相同。如果可以的话,我宁愿不迁移到 1.6.1。

从那时起,我就对其他 API 进行了这样的 ajax 调用,但是在使用 Google Places 时遇到了问题。以下是您可以使用的非常基本的代码示例。您需要在 Google 提供的 API 控制台 (https://code.google.com/apis/console) 中获取自己的密钥

jQuery.noConflict();
 jQuery(document).ready(function(){

  var url = 'https://maps.googleapis.com/maps/api/place/search/json';

  jQuery.ajax({
   url: url,
   dataType: 'jsonp',
   type: 'GET',
   data:  {
     location: '33.787794,-117.853111',
     radius: 1000,
     name: 'coffee',
     key: 'your_key', // add your key here
     sensor: 'false'
     },

   // on success
   success: function(data, textStatus, jqXHR){

      console.log(data);


   },

   // on failure
   error: function (jqXHR, textStatus, errorThrown){
    console.log(jqXHR);
    console.log(textStatus);
    console.log(errorThrown);
   }
   });
 });
4

2 回答 2

5

从文档中我可以看到,Google Places Web Service API 不支持JSONP - 仅支持 JSON。您看到的错误是因为响应只是 JSON,但被解析为 JSONP,这会导致错误。

查看 Google Maps JavaScript API - 它包含一个您可以使用的 Places 库 - 请参阅google.maps.places.PlacesServices#search()

AFAIK,似乎正在转向删除 JSONP 支持 - 例如,在 v2 中用于支持 JSONP(未记录)但在 v3 中不再支持的地理编码 API。有人建议可能是为了鼓励开发人员使用 JavaScript API。

于 2011-05-23T23:50:45.347 回答
4

以下不是直接的解决方案。但是,这就是我让它工作的方式......

由于不支持 JSONP(而且我不明白客户端代码应该如何使用该 API),解决方案是通过您的服务器代理它......如果您在服务器端使用 rails,则如下可能适合你:

class PlacesController < ApplicationController
    def autocomplete
        # Using Google Web Services
        # https://code.google.com/apis/console
        url = "https://maps.googleapis.com/maps/api/place/autocomplete/json"
        _params = {
            :key => "<<< YOUR KEY >>>",
            :types => "geocode",
            :sensor => (params[:sensor] or false),
            :input => params[:q]
        }
        ans = %x{curl -G --data-urlencode #{_params.map{|k,v| "#{k}=\"#{v}\""}.join(" --data-urlencode ")} "#{url}"}
        ans = ActiveSupport::JSON.decode(ans)
        render :json => ans
    end
end

PS:要生成 API 密钥,请使用https://code.google.com/apis/console

于 2011-11-15T13:30:22.883 回答