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

jQuery Discussion :

Variables globales pour deux fichiers .js separés


Sujet :

jQuery

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 62
    Points : 48
    Points
    48
    Par défaut Variables globales pour deux fichiers .js separés
    Bonjour,
    voila en détail ce que je veux faire.
    Avant tout voila ce qui fonctionne:

    fichier1.js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var test;  //variable globale
    jQuery(document).ready(function($){
    test="Welcome";
    });
    fichier2.js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    jQuery(document).ready(function($){
    console.log(test); //affiche welcome
    });
    La variable test a été transmise au fichier2.js, tout va bien...
    A noter que si je déclare [var test;] sous la ligne 3 le résultat est pareil...

    Maintenant je modifie le code comme ci-dessous

    fichier1.js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var test; //variable globale
    jQuery(document).ready(function($){
         $("#connexionForm").submit(function(event){
         test="Welcome";
      });
    });
    fichier2.js
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    jQuery(document).ready(function($){
    console.log(test); //affiche undefine
    });
    Modifier la variable globale 'test' dans une fonction ne modifie pas ma variable globale transmise au fichier2.js, Pourquoi???

  2. #2
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 183
    Points : 274
    Points
    274
    Par défaut
    Quand tu as 2 fichiers JS chargés dans une même page, ils ont tous les deux le même contexte, la page dans ce cas.

    Et regarde bien ton code. Tu mets une valeur à "test" sur l'évènement "submit" d'un formulaire.
    Donc cette variable n'aura qu'une valeur que lors que le formulaire sera envoyé. Et toi tu veut afficher la valeur de cette variable au chargement de la page.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Non, non!
    Sans doute n'ai-je pas été assez clair. Mais le fichier2.js est attaché a une autre page qui elle est appelée en cliquant sur le sumit.

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    Si tes fenêtres ont un lien de parenté http://www.developpez.net/forums/d27...enetre-enfant/
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Bonjour,

    un point important. Je suppose que tu lies ton fichier 2 après fichier 1, un peu comme ceci :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <script src="fichier1.js"></script>
    <script src="fichier2.js"></script>
    (Si ce n'est pas le cas, merci de nous montrer comment tu les as liés.)

    Ces fichiers contiennent chacun une instruction $(document).ready(...), ce qui revient à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $(document).ready(fonction1);
    $(document).ready(fonction2);
    Il faut savoir que $(document).ready cache un gestionnaire d'évènement. Il agit sur l'évènement DOMContentLoaded qui est lancé par la page au moment où la construction de l'arbre DOM de la page se termine (si tu as Firebug, dans l'onglet réseau il est indiqué par la ligne verticale bleue).

    Quand ton code s'exécute, en supposant que l'évènement DOMContentLoaded ne s'est pas encore produit (*), deux fonctions sont enregistrées pour un appel ultérieur. L'ordre n'est pas garanti. Dans la théorie, les fonctions s'exécutent en même temps. Dans la pratique, elles s'exécutent l'une après l'autre car il n'y a qu'un seul fil d'exécution JavaScript. Mais selon l'implémentation du moteur JavaScript, il est tout à fait probable que la fonction 2 soit appelée avant la fonction 1, pour une raison ou une autre.

    Pour formuler ça autrement : le fait que toi, développeur, aies inscrit les deux fonctions pour être appelées au même instant, signifie implicitement que l'ordre dans lequel elles seront appelées n'est pas important pour toi. C'est subtil, mais il faut faire attention à ça.

    Conclusion : c'est à toi de prendre tes précautions pour t'assurer que les appels se font dans l'ordre que tu souhaites. Et les plus simple à mon avis, c'est d'appeler la fonction 2 depuis la fonction 1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $(document).ready(function() { // fonction 1
       ...
       fonction2();
    });
    (*) Si DOMContentLoaded s'est produit, jQuery appelle les fonctions au moment où elles sont déclarées. Dans ce cas, l'ordre est respecté, mais :
    • soit tu ne peux pas être certain que DOMContentLoaded est toujours lancé avant tes fonctions, et donc tu ne peux pas être sûr de l'ordre ;
    • soit il est toujours lancé avant, et donc tu peux simplement retirer les $(document).ready et appeler directement tes fonctions.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  6. #6
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    La situation dans laquelle je me trouve est exactement celle décrite par WATILIN.
    J'ai bien compris que l'ordre dans lequel les fonctions se déclancheront n'est pas garanti.
    Pour ce qui est de la proposition "le plus simple à mon avis, c'est d'appeler la fonction 2 depuis la fonction 1.", j'avoue ne pas comprendre comment cela est possible.
    En fait et d'une facon plus générale, ma question est de savoir comment récupérer en page2 la valeur d'une variable modifiée dans une fonction en page1...
    J'espere etre clair.
    (désolé pour l'accentuation mais mon clavier ne dispose que des é)...

  7. #7
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    En relisant le topic, je pense que j'ai mal compris la façon dont tu lies tes deux scripts. Je crois que la réponse de SpaceFrog est la plus adaptée :
    Citation Envoyé par SpaceFrog Voir le message
    Si tes fenêtres ont un lien de parenté http://www.developpez.net/forums/d27...enetre-enfant/
    Si tu veux être plus précis, tu devrais nous dire quelles pages sont impliquées dans ton scénario, à quels moments (c'est-à-dire à quels évènements), et quelle page lie quel script.
    Note que si tu n'annules pas l'évènement submit, il y a rechargement ou changement de page, et le contexte JavaScript est perdu.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  8. #8
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Merci de prendre le temps de me répondre.
    Je vais prendre un scénario simple.

    ->Entrée sur le site par la Page index.php.
    ->il faut se loger.
    Le client saisit son login.
    ->on vérifie si le login existe dans la bdd (php).
    ->si le login est ok on charge une nouvelle page.

    Pour récupérer le login dans la nouvelle page je fais:
    1 - Comme spacefrog m'a aiguillé quelque chose comme [var login = window.opener.document.getElementById("login").value;]. Ici je suis dans la nouvelle page et je demande a javascript de rechercher dans la page index.php le login saisi.

    2 - Utiliser php, envoyer le login saisi par $_POST, inscrire en dur la valeur sur la nouvelle page et cacher la valeur. Ensuite récupérer la valeur cachée avec javascript quelque chose comme [login=$("#login");].

    Cela fonctionne certes, mais bon-sang n'est-il pas possible de transmettre directement le login coté client a la nouvelle page sans passer par ces artifices. Quelque chose du genre:
    page index.php-> je mémorise le login ou autre dans une variable (globale ou pas ???)
    -> j'accede a cette variable partout dans mes scripts.

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    et les variables de session ?
    et ajax ?
    et les popins ?


    Bref largement de quoi te passer d'un login en popup !
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  10. #10
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Right, il existe de nombreuses solutions et sans doute d'autres que nous n'avons pas cité.
    Cependant je revient a ma question et pour la quelle personne ne répond, l'utilisation d'une simple variable globale n'est-elle pas possible.
    Javascript m'oblige-t-il a mettre tous mes scripts dans un seul fichier pour y arriver?

  11. #11
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    Non en js la variable n'est pas lié au fichier, mais à la window
    il ne peut donc pas y avoir de variable globale de portée supérieure à sa window dans laquelle le js est chargé

    d'ou les propositions ci-dessus qui s'affranchissent de cet état de fait soit en remontant au niveau du serveur avec les variables de session ou ajax ou en restant sur la même fenêtre avec les popin.
    on peut aussi stocker des données au niveau des cookies ou local storage qui survivent au rechargement de page...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  12. #12
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    en js la variable n'est pas lié au fichier, mais à la window
    Ça ne peut pas être mieux résumé, je crois.

    Citation Envoyé par diagonale Voir le message
    inscrire en dur la valeur sur la nouvelle page et cacher la valeur. Ensuite récupérer la valeur cachée avec javascript quelque chose comme [login=$("#login");].
    Tu ne peux pas cacher la valeur dans la page. Si je regarde le code source de la page, je peux la voir.
    Ce que tu peux faire par contre, c'est la chiffrer. Le principe qui en ressort c'est : au lieu d'envoyer directement l'information de login, tu envoies un jeton de sécurité, qui change à chaque action du client. Ça nécessite un peu de mise en œuvre (en fait, c'est même assez compliqué et il existe des bibliothèques pour le faire).

    Plus simplement, tu peux te reposer sur une session PHP. Reste tout de même conscient que, sans connexion HTTPS, l'usurpation de session est possible. Je t'invite à lire un billet que j'ai écrit à ce propos.

    Cela fonctionne certes, mais bon-sang n'est-il pas possible de transmettre directement le login coté client a la nouvelle page sans passer par ces artifices.
    Comme le suggère Spaffy, ce qui correspond exactement à ta demande c'est les cookies ou le localStorage. Ce sont tous deux des moyens de stockage d'information persistante côté client. Mais, étant côté client, ils permettent à l'utilisateur de fabriquer l'information, tu ne peux donc pas te reposer dessus pour authentifier un visiteur.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  13. #13
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 62
    Points : 48
    Points
    48
    Par défaut
    Compris,
    J'ai la réponse a ma question.
    Merci a tous pour vos commentaires qui m'ont parfaitement éclairés.

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

Discussions similaires

  1. [Débutant C#]Variable Globale pour deux forms
    Par progfou dans le forum C#
    Réponses: 7
    Dernier message: 20/02/2007, 09h08
  2. Variable globales pour mon appli
    Par soufir dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 07/06/2006, 11h51
  3. portée des variables globales dans un fichier js
    Par crakazoid dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 14/04/2006, 16h49
  4. Réponses: 6
    Dernier message: 19/01/2006, 22h52
  5. variable globale pour plusieurs Form
    Par ced2004 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 05/04/2005, 08h50

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