2010-11-30 4 views
1

Existe-t-il un autre moyen de faire cela qui pourrait empêcher le setTimeout d'être nécessaire?Évitez setTimeout dans la fonction de rappel ajax

function initialize(){ 

    $.get('test.xml', function(xml){ 

     //do some stuff with xml like... 
     var icons = xml.documentElement.getElementsByTagName("icon"); 
     for(var i = 0; i < icons.length; i++) { 
      var iconImage = icons[i].getAttribute("image"), 
     } 

     //do more things to create markers like... 
     markers.push(marker); 

     //try to add markers to map 
     //this will give an error 
     addMarkers(markers); 

     //setTimeout makes it work 
     setTimeout("addMarkers(markers)", 300); 

     //is there any way to avoid the timeout? 
    }); 

} 
+2

Quelle erreur donne-t-elle? et d'où vient le «marqueur»? –

+0

En relation: [Fonctionnement de JavaScript Timers] (http://ejohn.org/blog/how-javascript-timers-work/) –

+0

Il donne une erreur API pour l'utilitaire markerManager pour google maps – Mike

Répondre

2

Il est difficile de dire ce qui est faux, puisque vous ne fournissez pas l'erreur que vous obtenez ou le code qui crée le marqueur. Essayer de deviner, la chose la plus probable qui se passe est que le code que vous exécutez pour créer les marqueurs et peut-être pour initialiser la carte ne s'exécute pas de manière synchrone, mais asynchrone. Ce sera certainement le cas s'il y a des appels ajax impliqués et cela signifie que le système de carte/gestionnaire n'est pas prêt au moment où la dernière ligne javascript est appelée, mais après un certain temps et par sûr après que la fonction soit terminée . Afin d'éviter le setTimeout, qui entre autres introduira un retard inutile et est très facile à casser, si plus de temps est nécessaire dans certaines conditions, vous devez regarder le code qui crée les marqueurs et voir s'il y a est un callback/event défini, qui marque l'achèvement de la procédure d'initialisation.

Questions connexes