2013-03-15 3 views
0

Je veux créer un JavaScript global var qui contient de la valeur dont j'ai besoin. J'ai lu de la valeur dans un fichier XML et je l'utilise pour montrer la carte de Google Map. Je stockerais ces informations dans certaines variables et les montrerais quand les utilisateurs les demanderaient.global var sur Javascript pour Google Map API V2

Je possède ce code:

var tot_pts = new Array(); //global variable 

if (GBrowserIsCompatible()) { 

    // Display the map, with some controls and set the initial location 
    ... 

    // A function to create the marker and set up the event window 
    function createMarker(point,train) { 
    var marker = new GMarker(point); 
    return marker; 
    } 

    request.open("GET", "example.xml", true); 
    request.onreadystatechange = function() { 
    if (request.readyState == 4) { 
     var xmlDoc = GXml.parse(request.responseText); 
     //read value on XML 
     tot_pts.push(new_path); 

     //show all value on map 
     for (var i = 0; i < tot_pts.length; i++) { 
     point= []; 
     point[0]=tot_pts[i].start; 
     point[1]=tot_pts[i].end; 
     map.addOverlay(new GPolyline(point,tot_pts[i].colour,3)); 
     marker = createMarker(tot_pts[i].start,tot_pts[i].train); 
     map.addOverlay(marker); 
     marker = createMarker(tot_pts[i].end,tot_pts[i].train); 
     map.addOverlay(marker); 
     } 
    }//end of if request=4 
    }// end of on ready... 

    request.send(null); 

}// end of compatible browser 

Si je déplace la dernière « boucle » à une autre position dans ce code le tableau tot_pts est vide. Pourquoi cela arrive-t-il? Puis-je améliorer mon code d'une manière ou d'une autre?

+0

Il semble que 'tot_pts' n'obtienne que des données stockées juste avant cette boucle. Donc, lorsque vous placez la boucle for à un autre endroit, il serait logique que le tableau soit vide, car rien n'a encore été placé. Même si vous savez que le readyState de la requête va être 4, si vous placez la boucle for en dehors de la fonction 'onreadystatechange', la requête est asynchrone, donc la boucle for s'exécutera avant la fonction' onreadystatechange'. – jonhopkins

+0

ok, alors si je veux attendre une interaction de l'utilisateur avec une interface HTML, puis-je mettre mon écouteur sur une fonction onreadystatechange? Ou je me trompe? – user2174050

+0

Cela dépend de ce que vous voulez attendre. Si vous attendez l'interaction de l'utilisateur avant de faire la boucle for, alors je placerais simplement la boucle dans une fonction séparée, dites 'putPointsInOverlay', et ensuite quelque chose comme'

Répondre

0

request.readyState == 4 signifie que la réponse de XMLHttpRequest est prête. Donc, quand vous obtenez la réponse, votre tableau tot_pts est poussé avec une valeur (new_path) à l'étape -> tot_pts.push (new_path); Jusqu'à ce que le tableau affiche vide car il n'est pas défini explicitement avec des valeurs.

Questions connexes