IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

portée et existence d'une variable


Sujet :

JavaScript

  1. #1
    Membre du Club Avatar de floopi51
    Inscrit en
    Octobre 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 136
    Points : 62
    Points
    62
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    <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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?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

  2. #2
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    print('<script type="text/javascript">');
            print('function myLoad() {');
            print('load();');
            print('AddMarker('.$lat.','.$long.');');
            print('}');
    print('</script>');
    ?>
    et dans ton body :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onload="myLoad()">

  3. #3
    Membre du Club Avatar de floopi51
    Inscrit en
    Octobre 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 136
    Points : 62
    Points
    62
    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.

  4. #4
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    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 ... ) ?


    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 ?

  5. #5
    Membre du Club Avatar de floopi51
    Inscrit en
    Octobre 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 136
    Points : 62
    Points
    62
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?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();

  6. #6
    Membre expérimenté
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Points : 1 333
    Points
    1 333
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    print('<script type="text/javascript">');
            print('function myLoad() {');
            print('load();');
    if(userConnected()) {
            print('AddMarker('.$lat.','.$long.');');
    }
            print('}');
    print('</script>');
    ?>
    ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <body onload="load();if(runAddMarker){runAddMarker()}">
    <?php
    print('<script type="text/javascript">');
            print('function runAddMarker() {');
            print('AddMarker('.$lat.','.$long.');');
            print('}');
    print('</script>');
    ?>

  7. #7
    Membre du Club Avatar de floopi51
    Inscrit en
    Octobre 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 136
    Points : 62
    Points
    62
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme avec la PORTE DE VIE D'UNE VARIABLE EN PHP
    Par stomerfull dans le forum Langage
    Réponses: 2
    Dernier message: 09/12/2005, 14h17
  2. [LG] Contrôle d'existence d'une variable ?
    Par Aenigma dans le forum Langage
    Réponses: 4
    Dernier message: 21/09/2005, 06h59
  3. Réponses: 3
    Dernier message: 19/08/2005, 14h24
  4. Réponses: 3
    Dernier message: 05/04/2005, 14h36
  5. [C#] Tester existence d'une variable de session
    Par IDNoires dans le forum ASP.NET
    Réponses: 2
    Dernier message: 31/12/2004, 12h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo