Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire Cours JavaScript, FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 04/12/2009, 15h12   #1
Membre régulier
 
Avatar de floopi51
 
Date d'inscription: octobre 2008
Localisation: vers Grenoble
Messages: 114
Par défaut portée et existence d'une variable

Bonjour,

j'ai une page web qui est construite dynamiquement en PHP. J'insers dans cette page web une map google en utilisant le code javascript ci-dessous :

Code :
 
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=mykey&sensor=false" type="text/javascript"></script>
<script type="text/javascript">
 
var MaCarte;
var geocoder = null;
var LatitudeCarteClick;
var LongitudeCarteClick;
function load() {
  if (GBrowserIsCompatible()) {
    MaCarte = new GMap2(document.getElementById('map'));
    MaCarte.setCenter(new GLatLng(47, 3), 5);
    MaCarte.addControl(new GLargeMapControl());
    MaCarte.addControl(new GMapTypeControl());
    MaCarte.addControl(new GOverviewMapControl());
    MaCarte.addControl(new GScaleControl());
    geocoder = new GClientGeocoder();
  }else{
    alert("D&eacute;sol&eacute;, mais votre navigateur n\'est pas compatible avec Google Maps");
  }
}
function dec2dms(l) {
  d = Math.floor(l);
  p = (l - d) * 60;
  m = Math.floor(p);
  s = Math.round((p - m) * 60);
  return d+"° "+m+"'' "+s+"'";
}
 
function recentrerCarte(){
  window.setTimeout(function(){MaCarte.panTo(new GLatLng(LatitudeCarteClick, LongitudeCarteClick));}, 1000);
}
 
function AfficherAdresse(addresse) {
  if (geocoder) {
    geocoder.getLatLng(addresse,
		       function(point) {
			 if (!point) {
			   alert('Impossible de geolocaliser cette adresse' + addresse);
			   MaCarte.setCenter(new GLatLng(47, 3), 5);
			 } else {
			   MaCarte.clearOverlays();
			   var marker = new GMarker(point, {draggable: true});
			   GEvent.addListener(marker, 'dragstart', function() {
						MaCarte.closeInfoWindow();
					      });
			   
			   GEvent.addListener(marker, 'dragend', function(point) {
						recentrerCarte();
					      });
			   MaCarte.addOverlay(marker);
			   MaCarte.setCenter(point, 15);
			 }
		       }
		       );
  }
}
 
function AddMarker(lat,lon) {
 
  var point = new GPoint(lat, lon);
  var newMarker = new GMarker(point);
  MaCarte.addOverlay(newMarker);
}
 
</script>
 
 
Je fais un include de ce code javascript dans le PHP pour construire la page.
Lorsqu'un utilisateur s'identifie sur mon site, je veux afficher des infos le concernant sur la carte construite au départ.
J'insère donc l'appel à la fonction AddMarker (latitude, longitude); dans ma page construite :

Code :
 
<?php
print('<script type="text/javascript">');
	print('AddMarker('.$lat.','.$long.');');
print('</script>');
?>
 
Lorsque j'execute le code dans mon navigateur, j'ai le message suivant dans la console d'erreur : "MaCarte is Undefined".

Comment puis-je accéder à la variable MaCarte définie et initialisée lors de la première exécution du javascript ?

Je précise que je débute totalement en javascript.

Merci pour votre aide.

Floopi51
floopi51 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/12/2009, 15h21   #2
Modérateur
 
Avatar de gwyohm
 
Date d'inscription: octobre 2007
Localisation: Paris
Messages: 491
Par défaut

Ton problème, c'est que MaCarte ne sera initialisée que quand la fonction load aura été appelée. (Certainement sur le onload de ton body, non ?

Change un peut ton code :

Code :
 
<?php
print('<script type="text/javascript">');
	print('function myLoad() {');
	print('load();');
	print('AddMarker('.$lat.','.$long.');');
	print('}');
print('</script>');
?>
 
et dans ton body :
Code :
<body onload="myLoad()">
__________________
on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
gwyohm est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/12/2009, 15h31   #3
Membre régulier
 
Avatar de floopi51
 
Date d'inscription: octobre 2008
Localisation: vers Grenoble
Messages: 114
Par défaut

Citation:
Envoyé par gwyohm Voir le message
Ton problème, c'est que MaCarte ne sera initialisée que quand la fonction load aura été appelée. (Certainement sur le onload de ton body, non ?
effectivement MaCarte est initialisée à l'appel de load(); et l'appel à load(); est fait dans le onload de mon body.

Le truc c'est que je ne veux pas que la fonction AddMarker(x,y); soit appelée au premier chargement mais seulement si un user est identifié.
Donc je ne peux pas l'appeler avec le load(); dans le onload du body.

C'est pour ça que je voudrai être sûre que javascript me permet de conserver la variable MaCarte tant que ma page est affichée.
floopi51 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/12/2009, 15h40   #4
Modérateur
 
Avatar de gwyohm
 
Date d'inscription: octobre 2007
Localisation: Paris
Messages: 491
Par défaut

Citation:
Envoyé par floopi51 Voir le message
Je fais un include de ce code javascript dans le PHP pour construire la page.
Lorsqu'un utilisateur s'identifie sur mon site, je veux afficher des infos le concernant sur la carte construite au départ.
Peux-tu détailler un peu plus le scénario d'authentification (rechargement de page, via popup, via AJAX ... ) ?


Citation:
C'est pour ça que je voudrai être sûre que javascript me permet de conserver la variable MaCarte tant que ma page est affichée.
Pareil, qu'entends tu par tant que ma page est affichée ?
__________________
on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
gwyohm est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/12/2009, 15h55   #5
Membre régulier
 
Avatar de floopi51
 
Date d'inscription: octobre 2008
Localisation: vers Grenoble
Messages: 114
Par défaut

Citation:
Envoyé par gwyohm Voir le message
Peux-tu détailler un peu plus le scénario d'authentification (rechargement de page, via popup, via AJAX ... ) ?
Lorsque mon utilisateur est identifié, je sauvagarde son login comme donnée de session en PHP.
Il peut ensuite afficher les infos le concernant en cliquant sur un lien défini comme ci-dessous en PHP :

Code :
 
<?php
print('Retrouvez vos infos<a href="index.php?section=mesinfos&page=mesinofs" title="mes Infos">ici</a>.');
?>
 
Avec ce lien l'ensemble de la page est reconstruite, il y a donc un appel à load(); dans le onload du body et MaCarte est initialisée.
On récupère dans une base de données les infos à afficher pour le user et on appel la fonction AddMarker(); pour ajouter les marker sur MaCarte.


Citation:
Envoyé par gwyohm Voir le message
Pareil, qu'entends tu par tant que ma page est affichée ?
Je veux être sûre que la variable MaCarte n'est pas détruite entre l'appel à load dans le onload du body et l'appel à ma fonction AddMarker();
floopi51 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/12/2009, 16h10   #6
Modérateur
 
Avatar de gwyohm
 
Date d'inscription: octobre 2007
Localisation: Paris
Messages: 491
Par défaut

Le problème, c'est que tu ne peux pas faire un appel à AddMarker avant que MaCarte soit initialisée, donc avant que load ne soit appelée. Comme load est appelée sur l'événement onload, tu n'as pas beaucoup de choix...

Soit tu passes par une action utilisateur pour faire ton AddMarker,
Soit tu fais comme j'ai dit dans ma première réponse ou dans le même genre:

Code :
 
<?php
print('<script type="text/javascript">');
	print('function myLoad() {');
	print('load();');
if(userConnected()) {
	print('AddMarker('.$lat.','.$long.');');
}
	print('}');
print('</script>');
?>
 
ou bien

Code :
 
<body onload="load();if(runAddMarker){runAddMarker()}">
<?php
print('<script type="text/javascript">');
	print('function runAddMarker() {');
	print('AddMarker('.$lat.','.$long.');');
	print('}');
print('</script>');
?>
 
__________________
on ne dit pas "ça ne marche pas" on dit "je suis incapable de faire fonctionner correctement les outils mis à ma disposition"
gwyohm est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/12/2009, 17h39   #7
Membre régulier
 
Avatar de floopi51
 
Date d'inscription: octobre 2008
Localisation: vers Grenoble
Messages: 114
Par défaut

je vais essayer de modifier mon code pour faire l'appel à AddMarker sur le onload du body et
le load de la carte avant ça.

merci pour tes réponses.

Floopi
floopi51 est déconnecté   Envoyer un message privé Réponse avec citation
NEWS JAVASCRIPTF.A.Q JSTUTORIELS JSSOURCES JSLIVRES JS

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 00h48.


Vos questions techniques : forum d'entraide JavaScript - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.