2010-11-05 101 views
11

當我做了谷歌地圖API V3的JavaScript延遲加載谷歌地圖API V3 jQuery的回調

的文件說,關於把作爲回調的參數中的URL的功能,這將被執行的名字的延遲加載,該腳本已加載。

$(document).ready(function(){ 
    var s = document.createElement("script"); 
    s.type = "text/javascript"; 
    s.src = "http://maps.google.com/maps/api/js?v=3&sensor=true&callback=gmap_draw"; 
    $("head").append(s); 
}); 

所以我必須定義gmap_draw()函數。

當我把這個函數放在domready塊中時,它是不可見的。

此問題的任何解決方法? (除了將函數放在準備好的塊之外)

回答

20

由於回調必須是全局的,因此您可以通過從ready處理程序中訪問window來創建回調。

$(document).ready(function(){ 
    var s = document.createElement("script"); 
    s.type = "text/javascript"; 
    s.src = "http://maps.google.com/maps/api/js?v=3&sensor=true&callback=gmap_draw"; 
    window.gmap_draw = function(){ 
     alert ("Callback code here"); 
    }; 
    $("head").append(s); 
}); 
+0

難道就沒有辦法進入一個命名空間的回調名字?正如你所說的,上面的函數是全局的,所以它更容易讀出它的jQuery塊。好的方法,謝謝分享 – astropanic 2010-11-05 00:42:11

+0

如果通過命名空間回調你是指在「myNamespace」(或類似的)對象中定義回調? – 2010-11-05 00:44:20

+0

假設我們有一個gmapsFactory對象,並且我想執行一個gmapsFactory.init() – astropanic 2010-11-05 00:46:54

32

另一種選擇是使用Google Loader

$.getScript('https://www.google.com/jsapi', function() 
{ 
    google.load('maps', '3', { other_params: 'sensor=false', callback: function() 
    { 
     // Callback code here 
    }}); 
}); 
+0

完美適用於內部自定義類加載腳本。謝謝:) – Archer 2014-01-02 15:04:07

+0

感謝這工作完美 – Orlando 2014-08-20 14:36:20

+0

保存的一天:D – yuva 2015-01-28 04:56:26