Опрос Google Places API с использованием jQuery - PullRequest
3 голосов
/ 24 мая 2011

Google Places API теперь общедоступен. Я пытаюсь использовать вызов .ajax () в jQuery, чтобы позвонить в Google Places. Ошибка, которую я продолжаю получать: Uncaught SyntaxError: Неожиданный токен:

Я использую jQuery 1.5.2. Я тоже пробовал 1.5.1, но результаты были те же. Я бы предпочел не переходить на 1.6.1, если смогу помочь.

С тех пор я совершал подобные ajax-вызовы другим API, но у меня проблемы с Google Местами на карте. Ниже приведен очень простой пример кода, с которым вы можете играть. Вам нужно будет получить свой собственный ключ на консоли API, которую предлагает Google (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);
   }
   });
 });

Ответы [ 2 ]

5 голосов
/ 24 мая 2011

Из документации видно, что API веб-службы Google Адресов не поддерживает JSONP - только JSON. Вы видите ошибку, потому что ответ просто JSON, но анализируется, как если бы это был JSONP, и это вызывает ошибку.

Проверьте API Google Maps JavaScript - он включает в себя библиотеку Places, которую вы можете использовать - см. google.maps.places.PlacesServices#search().

AFAIK, похоже, есть сдвиг в сторону удаления поддержки JSONP - например, API геокодирования, используемый для поддержки JSONP (недокументированный) в v2, но больше не в v3. Кто-то предположил, что это может помочь разработчикам использовать JavaScript API.

4 голосов
/ 15 ноября 2011

Ниже не является прямым решением. Но вот так у меня получилось ...

Поскольку 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

...