2010-01-08 35 views
3

以下告訴我GMap2沒有定義。但是使用GMap2的代碼在回調中。無法加載谷歌地圖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

是的,OP已經提供的API密鑰。我已將其從問題中刪除,並用API_KEY_HERE代替它 –

回答

4

你可以通過兩種方式處理此:

1,繼續使用$.getScript

似乎你需要一個async=2參數以及一個不同的回調結構才能工作。我的答案適用於您的代碼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.使用谷歌AJAX裝載機

既然你已經使用了谷歌圖書館,爲什麼不use their loader幫助你:

<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

謝謝,我試了兩個,並決定堅持jquery,因爲谷歌ajax加載程序是一個額外的16kb。 –

+0

@Shawn很高興它爲你工作!就你所知,它是16KB未壓縮的,但它是從谷歌服務器壓縮的,所以它只有5.8k –

1

您是否檢查瀏覽器是否兼容?我這樣做,在我所有的GMAP的應用,雖然它很少失敗...

if (GBrowserIsCompatible()) 
+0

它根本沒有找到該腳本。它也告訴我,功能不可用。 –

+0

基於這兩個函數給出的錯誤,它聽起來像一個腳本不是加載錯誤,但它看起來像道格幫助你。祝你好運與你的應用程序... – Sparky