2010-11-05 5 views
11

je le chargement paresseux du javascript v3 api google mapsgoogle maps charge paresseux api v3 jQuery rappel

La documentation indique au sujet de la mise en tant que paramètre de rappel dans l'url le nom de la fonction, qui sera exécutée, lorsque le script a chargé.

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

Je dois donc définir la fonction gmap_draw(). Lorsque j'entoure cette fonction dans le bloc domready, elle n'est pas visible.

Des solutions de contournement de ce problème? (sauf mettre la fonction hors du bloc domready)

Répondre

20

Étant donné que le rappel doit être global, vous pouvez en créer un en accédant au window depuis le gestionnaire de disponibilité.

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

est-il pas moyen d'entrer un nom de rappel des espaces de noms? Comme vous l'avez dit, la fonction ci-dessus est globale, donc il est plus lisible de la mettre hors du bloc jquery. Bonne approche, merci pour le partage – astropanic

+0

Si vous appelez le callback d'un espace de nommage, voulez-vous dire définir un callback dans un objet "myNamespace" (ou similaire)? –

+0

Supposons que nous ayons un objet gmapsFactory et que je souhaite exécuter gmapsFactory.init() – astropanic

32

Une autre option consiste à utiliser Google Loader:

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

Parfait pour l'utilisation à l'intérieur des classes personnalisées qui chargent le script eux-mêmes. Merci :) – Archer

+0

Merci cela fonctionne parfait – Orlando

+0

Sauvé le jour: D – yuva

Questions connexes