Как совершать междоменные вызовы AJAX в API Карт Google? - PullRequest
43 голосов
/ 27 мая 2010

Я пытаюсь сделать jQuery $.getJSON вызовом веб-службы геокодирования Google Maps , но это не работает из-за проблем междоменной безопасности.

Мне не удалось выяснить это в Интернете, но я немного читал об API Javascript Google или JSONP, но пока нет четкого ответа ...

Может ли кто-нибудь осветитьмне?

Спасибо!

1 Ответ

88 голосов
/ 27 мая 2010

Я не вижу преимуществ в использовании серверной веб-службы геокодирования , когда Google Maps предоставляет полнофункциональный клиентский API геокодирования для JavaScript.

Прежде всего, это автоматически решает проблему того же источника, и, кроме того, лимиты запросов будут рассчитываться для IP-адреса клиента, а не для IP-адреса сервера, что может иметь огромное значение для популярного сайта.

Вот очень простой пример использования JavaScript Geocoding API v3:

<script src="http://maps.google.com/maps/api/js?sensor=false"></script>

<script type="text/javascript">     
   var geocoder = new google.maps.Geocoder();
   var address = 'London, UK';

   if (geocoder) {
      geocoder.geocode({ 'address': address }, function (results, status) {
         if (status == google.maps.GeocoderStatus.OK) {
            console.log(results[0].geometry.location);
         }
         else {
            console.log("Geocoding failed: " + status);
         }
      });
   }    
</script>

Если по какой-то причине вы все еще хотите использовать серверный веб-сервис, вы можете установить очень простой обратный прокси , возможно, используя mod_proxy , если вы используете Apache , Это позволит вам использовать относительные пути для ваших запросов AJAX, в то время как HTTP-сервер будет действовать как прокси для любого «удаленного» местоположения.

Основная директива конфигурации для настройки обратного прокси в mod_proxy - это ProxyPass. Обычно вы используете его следующим образом:

ProxyPass     /geocode/     http://maps.google.com/maps/api/geocode/

В этом случае браузер может сделать запрос на /geocode/output?parameters, но сервер будет обслуживать это, выступая в качестве прокси для http://maps.google.com/maps/api/geocode/output?parameters.

...