2010-11-05 9 views
11

ich faul Laden der Google Maps API v3 Javascriptfaul Last Google Maps API v3 jQuery Rückruf

Die Dokumentation sagt etwa als Callback-Parameter in der URL der Funktion den Namen setzen, der ausgeführt wird, wenn Das Skript wurde geladen.

$(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); 
}); 

Also muss ich die gmap_draw() -Funktion definieren.

Wenn ich diese Funktion im domready Block umschließe, ist es nicht sichtbar.

Problemumgehungen dieses Problems? (außer dass die Funktion aus dem domready-Block entfernt wird)

Antwort

20

Da der Callback global sein muss, können Sie einen Aufruf vornehmen, indem Sie innerhalb des Ready-Handlers auf window zugreifen.

$(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

Gibt es keine Möglichkeit, einen Namensraum Rückruf Namen eingeben? Wie Sie sagten, ist die obige Funktion global, so dass es besser lesbar ist, sie aus dem jquery-Block zu entfernen. Nice approach, danke für die Freigabe – astropanic

+0

Wenn Namespaced Callback Sie meinen, einen Rückruf in einem "myNamespace" (oder ähnlichem) Objekt zu definieren? –

+0

Nehmen wir an, wir haben ein gmapsFactory-Objekt, und ich möchte ein gmapsFactory.init() ausführen – astropanic

32

Eine weitere Option ist Google Loader zu verwenden:

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

Perfekt für die Verwendung in benutzerdefinierten Klassen, die das Skript selbst laden. Danke :) – Archer

+0

Danke das funktioniert perfekt – Orlando

+0

Gespeichert den Tag: D – yuva