Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2847 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [JS] Portée d'une variable, comprends pas

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JS] Portée d'une variable, comprends pas

n°2094648
Scarf3ss3
Posté le 11-08-2011 à 11:21:06  profilanswer
 

Bonjour à tous,
 
Je n'ai jamais eu l'occasion  de programmer vraiment en JS et du coup mes connaissances sont un peu limitées. Je suis face à un problème pour récupérer une valeur pour une mise en place de l'API google MAPS.
Voici la fonction en question :

Code :
  1. function newmarker (address) {
  2. var image = 'monimage.png';
  3. test = geocoder.geocode ({'address': address}, function(results, status) {
  4. if (status == google.maps.GeocoderStatus.OK) {
  5.  var latlong = results[0].geometry.location;
  6.  var marker = new google.maps.Marker({
  7.   map: map,
  8.   position: latlong,
  9.   icon: image
  10.  });
  11.  alert (latlong);
  12.  return latlong;
  13.   }
  14. });
  15. alert (test);
  16. }


Mon premier alert (latlong) renvoie bien la valeur que je souhaite. Donc je fais un return.
Je pensais que ma variable test prendrai cette valeur, mais ça n'est pas le cas.
En même temps ça ne m’étonne qu'à moitié car la fonction geocode a une fonction comme argument ???
J'avoue que je suis perdu, mon but étant que mon alert (test) renvoie la valeur de latlong
 
Je vous remercie sincèrement pour une éventuelle aide, je suis bien paumé. :jap:  :hello:

mood
Publicité
Posté le 11-08-2011 à 11:21:06  profilanswer
 

n°2094653
fred777888​999
Posté le 11-08-2011 à 11:30:35  profilanswer
 

Ce n'est pas une question de portee. L'appel a geocoder que tu mets dans test va appeler ta fonction en parametre mais va retourner ce que l'appli google maps a prevu. Tu peux si tu ne veux pas te pencher sur l'api, utiliser (salement j'en conviens) une var globale et ca devrait fonctionner.

Code :
  1. var gLatLong;
  2. function newmarker (address) {
  3. var image = 'monimage.png';
  4. test = geocoder.geocode ({'address': address}, function(results, status) {
  5. if (status == google.maps.GeocoderStatus.OK) {
  6. gLatLong = results[0].geometry.location;
  7. var marker = new google.maps.Marker({
  8.  map: map,
  9.  position: latlong,
  10.  icon: image
  11. });
  12. alert (gLatLong);
  13.   }
  14. });
  15. alert (gLatLong);
  16. }


Si tu veux faire plus propre, il faut que tu te plonge serieusement dans l'API google.
 
[edit] ne pas prendre le code pour argent comptant, j'ai oublie de renomer un latlong en gLatLong, je te laisse le soin de voir ou [/edit]


Message édité par fred777888999 le 11-08-2011 à 11:33:51
n°2094668
Scarf3ss3
Posté le 11-08-2011 à 12:04:24  profilanswer
 

Merci oui j'ai corrigé et puis ne pas mettre var gLatLong; mais gLatLong pour une portée globale.
Alors ça marche sans marcher. Imcompréhensible, regardez voilà le code complet

Code :
  1. latitudelongitude = false;
  2. window.addEvent ("domready", function ()
  3. {
  4. initialize();
  5. });
  6. function initialize() {
  7. geocoder = new google.maps.Geocoder();
  8. var latlng = new google.maps.LatLng(48.866667, 2.333333);
  9. var myOptions = {
  10.   zoom: 5,
  11.   center: latlng,
  12.   mapTypeId: google.maps.MapTypeId.ROADMAP
  13. }
  14. map = new google.maps.Map(document.getElementById("map_canvas" ), myOptions);
  15. //--------------------------------------------------------------------------
  16. var tablo = $$('#liste_btq div h2');
  17. i=0;
  18. tablo.each(function(item, index) {
  19.  inputname = 'adresse_'+i;
  20.  myadresse = $(inputname).get('value');
  21.  newmarker (myadresse);
  22.  alert (latitudelongitude);
  23.  i=i+1;
  24. });
  25. //--------------------------------------------------------------------------
  26. }
  27. function newmarker (address) {
  28. var image = 'monimage.png';
  29. geocoder.geocode( {'address': address}, function(results, status) {
  30. if (status == google.maps.GeocoderStatus.OK) {
  31.  //map.setCenter(results[0].geometry.location);
  32.  latlong = results[0].geometry.location;
  33.  var marker = new google.maps.Marker({
  34.   map: map,
  35.   position: latlong,
  36.   icon: image
  37.  });
  38.  latitudelongitude = latlong;
  39.  alert (latitudelongitude);
  40.   }
  41. });
  42. }


 
Il y a donc 2 alert sur latitudelongitude; et bien par la volonté de saint esprit latitudelongitude de la ligne 22 reste à false pendant 3 ou 4 passages de la boucle. Et après il prend bien la valeur de latlong. Je précise que quand à lui latitudelongitude de la ligne 39 a la bonne valeur sur les 3 ou 4 premiers passages, ce qui là dépasse pour moi l'entendement  :heink:  
 
En tout cas merci d'or et déjà pour ton aide


Message édité par Scarf3ss3 le 11-08-2011 à 12:07:01
n°2094701
fred777888​999
Posté le 11-08-2011 à 15:41:14  profilanswer
 

Ce n'est pas forcement magique. Tu passe une fonction en parametre a l'api google. Cette derniere va probablement l'appeler au moment qu'elle jugera opportun, ce qui n'as pas forcement grand chose a voir avec celui ou tu appele l'API :(
En fait, que cherches-tu a faire (a peu pres) ?

n°2094724
Scarf3ss3
Posté le 11-08-2011 à 16:56:44  profilanswer
 

Je revenais pour dire que j'avais résolu ce souci. Pas d'erreur on va dire, c'est exactement ce que tu dis. La réponse met du temps donc du coup le script court toujours ce qui créé ce genre de soucis. On n'a pas ce genre de soucis avec le php ;)
J'ai donc mis une condition qui vérifie qu'il y a bien toute les réponses avant de continuer.
 
Si jamais ça interesse voici le script qui fonctionne.
 

Code :
  1. latlong = new Array ();
  2. bounds = new google.maps.LatLngBounds();
  3. window.addEvent ("domready", function ()
  4. {
  5. initialize();
  6. });
  7. function initialize() {
  8. geocoder = new google.maps.Geocoder();
  9. var myOptions = { mapTypeId: google.maps.MapTypeId.ROADMAP};
  10. map = new google.maps.Map(document.getElementById("map_canvas" ), myOptions);
  11. var tablo = $$('#liste_btq div h2');
  12. var i = 0;
  13. var nbr = tablo.length;
  14. tablo.each(function(item, index) {
  15.  inputname = 'adresse_'+i;
  16.  myadresse = $(inputname).get('value');
  17.  newmarker (myadresse, nbr, i);
  18.  i++;
  19. });
  20. }
  21. function newmarker (address, nbr, i) {
  22. var image = 'monimage.png';
  23. geocoder.geocode( {'address': address}, function(results, status) {
  24. latlong[i] = false
  25. if (status == google.maps.GeocoderStatus.OK) {
  26.  latlong[i] = results[0].geometry.location;
  27.  var marker = new google.maps.Marker({
  28.   map: map,
  29.   position: results[0].geometry.location,
  30.   icon: image
  31.  });
  32.  if (latlong.length == nbr) {
  33.   lasuite ();
  34.  }
  35.   }
  36. });
  37. }
  38. function lasuite () {
  39. for (var i = 0; i < latlong.length; i++) {
  40.  // ON NE PREND QUE LES ADRESSES IDENTIFIEES
  41.  if (latlong[i]) {
  42.   bounds.extend(latlong[i]);
  43.  }
  44. }
  45. map.fitBounds(bounds);
  46. }


 
Le truc c'est que j'utilise des adresses postales pour placer des markers en utilisant la méthode geocode de l'API
Je voulais qu'il me retourne les latitudes et longitudes trouvées.
J'en ai besoin pour prendre les valeurs max, en vue d'utiliser la méthode fitBounds de l'API qui centre la carte avec le bon zoom automatiquement.
Voilà, merci encore !  :jap:


Message édité par Scarf3ss3 le 11-08-2011 à 16:57:44
n°2095196
gatsu35
Blablaté par Harko
Posté le 14-08-2011 à 19:55:00  profilanswer
 

Il va falloir que tu apprennes à coder en ASYCHRONE :o


---------------
Blablaté par Harko

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [JS] Portée d'une variable, comprends pas

 

Sujets relatifs
Comment lancer une fonction dans une fonction JS?Tester si une variable est vide dans un .bat
comment transférer une variable vers une autre page[SQL] Resultat requete dans une variable
[Javascript] Définir un attribut à l'aide d'une variableLimiter la porté d'une variable en emacs lisp
[Résolu] Affectation de variable/Macro copier coller Excel[Batch] Comment renommer en enlevant une variable
Typer un objet de type variableRécupération d'une variable contenue dans une frame
Plus de sujets relatifs à : [JS] Portée d'une variable, comprends pas


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR