2010-01-08 6 views
3

Le message suivant indique que GMap2 n'est pas défini. Mais le code qui utilise GMap2 est dans le rappel.Impossible de charger dynamiquement google map javascript

 $(function() { 
     $('#sample').click(function() { 
      $.getScript("http://maps.google.com/maps?file=api&v=2&sensor=true&key=API_KEY_HERE", function() { 
       var map = new GMap2(document.getElementById("mapTest")); 
       map.setCenter(new GLatLng(18, -77.4), 13); 
       map.setUIToDefault(); 

      }); 
     }); 
    }); 

<a id="sample">Click Me</a> 
<div id="mapTest" style="width: 200px; height: 100px;"></div> 
+1

Oui, l'OP a fourni une Clé API. Je l'ai supprimé de la question et l'ai remplacé par API_KEY_HERE –

Répondre

4

Vous pouvez aller de deux façons avec ceci:

1. Continuer à utiliser $.getScript:

Il semble que vous avez besoin à la fois d'un paramètre async=2 ainsi que d'une structure de rappel différente pour que cela fonctionne. Ma réponse est adaptée à votre code à partir de cette great walkthrough here.

<script type="text/javascript"> 
    function map_callback(){ 
     var map = new GMap2(document.getElementById("mapTest")); 
     map.setCenter(new GLatLng(18, -77.4), 13); 
     map.setUIToDefault(); 
    } 

    $(function(){ 
     $('#sample').click(function(){ 
      $.getScript("http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=true&amp;callback=map_callback&amp;async=2&amp;key=API_KEY_HERE"); 
     } 
    } 
</script> 

2. Utilisez le chargeur Google AJAX

Puisque vous utilisez déjà une bibliothèque Google, pourquoi ne pas use their loader pour vous aider:

<script type="text/javascript" src="http://www.google.com/jsapi?key=ABCDEFG"></script> 
<script type="text/javascript"> 
    google.load("jquery", "1.3.2"); 

    google.setOnLoadCallback(function(){ 
     $('#sample').click(function(){ 
      google.load("maps", "2", {"callback" : function(){ 
      var map = new GMap2(document.getElementById("mapTest")); 
      map.setCenter(new GLatLng(18, -77.4), 13); 
      map.setUIToDefault(); 
      } }); 
     } 
    }, true); // Passing true, though undocumented, is supposed to work like jQuery DOM ready 
</script> 
+0

Merci, j'ai essayé les deux et j'ai décidé de m'en tenir à la jquery car le loader ajax de google est un extra 16kb. –

+0

@Shawn heureux que cela a fonctionné pour vous! Juste pour que vous sachiez, il est 16kb non compressé, mais il est envoyé compressé à partir des serveurs de Google, donc il est seulement 5.8k –

1

Avez-vous vérifié si le navigateur est compatible? Je le fais dans toutes mes applications GMAP, même si elle manque rarement ...

if (GBrowserIsCompatible()) 
+0

Il ne trouve pas le script du tout. Il me dit également que la fonction n'est pas disponible. –

+0

Basé sur les deux fonctions donnant des erreurs, cela ressemblait à un script ne pas être une erreur de chargement, mais il semble que Doug vous a aidé. Bonne chance avec votre application ... – Sparky