web-dev-qa-db-fra.com

Comment passer des appels inter-domaines AJAX à l'API Google Maps?

J'essaye de faire un jQuery $.getJSON appel au service Web Google Maps Geocoding , mais cela ne fonctionne pas en raison de problèmes de sécurité interdomaines.

Je n'ai pas pu le comprendre en ligne, mais j'ai lu un peu sur l'API Google Javascript ou JSONP, mais jusqu'à présent, aucune réponse claire ...

Quelqu'un pourrait-il m'éclairer?

Merci!

43
Pierre Duplouy

Je ne vois aucun avantage à utiliser Service Web de géocodage côté serveur lorsque Google Maps fournit une fonctionnalité complète API de géocodage côté client pour JavaScript.

Tout d'abord, cela résout automatiquement votre problème d'origine, et en outre, les limites de demande seraient calculées par adresse IP du client au lieu de l'adresse IP du serveur, ce qui peut faire une énorme différence pour un site populaire.

Voici un exemple très simple utilisant l'API de géocodage JavaScript 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>

Si, pour une raison quelconque, vous souhaitez toujours utiliser le service Web côté serveur, vous pouvez configurer un très simple proxy inverse , peut-être en utilisant mod_proxy si vous utilisez Apache. Cela vous permettrait d'utiliser des chemins relatifs pour vos requêtes AJAX, tandis que le serveur HTTP agirait comme un proxy pour n'importe quel emplacement "distant".

La directive de configuration fondamentale pour configurer un proxy inverse dans mod_proxy est le ProxyPass. Vous l'utiliseriez généralement comme suit:

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

Dans ce cas, le navigateur pourrait faire une demande à /geocode/output?parameters mais le serveur servirait cela en agissant comme un proxy pour http://maps.google.com/maps/api/geocode/output?parameters.

88
Daniel Vassallo