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 d'une variable ou sortir d'une fonction


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2013
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Portée d'une variable ou sortir d'une fonction
    Bonjour,

    mon manque d'expérience en Javascript me confronte à un problème de compréhension dans mon code. En effet, après m'être arraché les cheveux pendant des heures, je viens vous demander conseil quant à mon développement Javascript, Jquery, Ajax...

    Mon but est d'envoyer par l'intermédiaire d'une url, des données codée en JSON. Ce principe est fonctionnel dans mon code mais je n'arrive pas à passer une variable en dehors de certaines fonctions...

    Voici le code HTML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" url='<?php echo JRoute::_("lien.php?task=addJS&format=json"); ?>' name="bouton">
    Ensuite, l'envoi des options en jquery avec une partie AJAX qui permet de récupérer d'autres données depuis un fichier PHP externe;

    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
     
     
    //Création de la variable globale
    var myCookies;
     
    //Function permettant de traiter la réponse XMLHttpRequest
    function GetCookies(reponse) {
     
     
    		/* ****JSON***** */
    		var data = eval( "(" + reponse + ")"); //Réception du modèle JSON depuis le controlleur
    		mycookies = '';
     
    		//Création d'une boucle pour récupérer les options
    		for(var key in data) {
     
    		option=data[key];
     
    		mycookies += option+' : '+$.cookie(option)+' \n\n';
     
    		}
    }
     
    //Récupération des noms de chaque cookie depuis fichiers.php
    function GetTitle() {
     
    var xhr = getXMLHttpRequest();
    	xhr.onreadystatechange = function() {
    		if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
     
    			GetCookies(xhr.responseText);
    		}
    	};
    	xhr.open("GET","fichier.php",true);
        xhr.send(null);
     
    }
     
     
    //Opération à effectuer lors du click du bouton Envoyer pour ajouter les options à l'url
    $("[name=bouton]").click(function(e){
     
    GetTitle();
     
    e.preventDefault();
     
            var url = $(this).attr('url');
     
    $.ajax({
    type:"POST",
    url: url,
    async:false,
    data: {'customPlugin[221][textinput][comment]':'\n\n'+mycookies,
    'customPrice[0][8]':221},			
    success: function(html){
              alert('OK');}
    });
     
    location.reload();
     
    });
    Ma question est donc la suivante : pourquoi je ne peux pas utiliser ma variable globale myCookies pour passer les informations à la dernière partie soit la ligne 53?

    S'il n'est pas possible de le faire ainsi, auriez-vous une autre solution? Peut-être en changeant la présentation de mes fonctions?

    Merci d'avance de votre aide

  2. #2
    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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" url='
    url ??? c'est quoi cet attribut url sur un bouton submit ?
    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 !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2013
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    J'ai pris cette partie sur un code déjà existant en pensant que cela se faisait comme ça.

  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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    regarde plutot du coté de jquery et des ses fonctionnalités ajax ...
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2013
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    C'est lié à cette partie là?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var url = $(this).attr('url');

  6. #6
    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 637
    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 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    mieux vaut alors passer par un attribut data-url
    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 !

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2013
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Cette partie là est fonctionnelle, ce que je n'arrive pas c'est récupérer la variable globale mycookies dans la dernière partie.

  8. #8
    Membre éclairé
    Avatar de Paleo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2013
    Messages : 242
    Points : 661
    Points
    661
    Par défaut
    Nous n'avons pas le code de "getXMLHttpRequest()" mais il est probable que le chargement Ajax soit fait en asynchrone.

    Par conséquent après l'exécution de la fonction "GetTitle()" (ligne 43), le résultat de "fichier.php" n'est pas chargé et le callback passé à "xhr.onreadystatechange" (ligne 28) n'est pas encore exécuté. L'appel de "$.ajax" (ligne 49) se fait donc avant de récupérer "mycookies".

    La solution est de créer une fonction qui contient le code de la ligne 47 à 59, puis d'appeler cette fonction entre la ligne 32 et 33.

    Mais pourquoi un "location.reload()" ??

Discussions similaires

  1. Contenu d'une variable devenant lui même une variable
    Par Copyright83 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 14/11/2012, 17h24
  2. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  3. [Smarty] Récuper une variable php à partir d'une variable Smarty
    Par SPKlls dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 23/04/2008, 17h40
  4. [Free Pascal] [2.2] Impossible d'assigner une variable de type T à une variable de type T
    Par Hibou57 dans le forum Free Pascal
    Réponses: 3
    Dernier message: 12/10/2007, 12h31
  5. [VB.NET] lien d'une base de donnée dans une variable
    Par Anubis666 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 19/01/2006, 10h56

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