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 :

variable globale et résultat local


Sujet :

JavaScript

  1. #21
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par marcha Voir le message
    A lire ton code, je vois rien de neuf par rapport à avant.

    ton alert() de la fin s'exécute avant le mydata=result;
    getData est une fonction de callback, tu peux la mettre où avant ou après qu'importe !

  2. #22
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par zenzo Voir le message
    getData est une fonction de callback, tu peux la mettre où avant ou après qu'importe !
    Ce que le monsieur essaye de t'expliquer, c'est qu'effectivement "tu peux la mettre où avant ou après qu'importe", mais du fait qu'il s'agisse d'un callback, justement, elle sera exécutée chronologiquement avant l'affectation à la variable globale (en fait juste après la déclaration de ton callback)

    EDIT : un petit test. Ajoute dans ta page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="button" value="GO" onclick="alert(mydata);">
    Et clique dessus après avoir fait ton appel Ajax (donc après l'exécution de ta fonction callback)

    A+

  3. #23
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Citation Envoyé par zenzo Voir le message
    Bonjour,
    alert dans le callback fonctionne bien sûr mais ce que je veux est alimenter mydata par result ainsi mydata a la nouvelle valeur !
    La cause de ton problème a été donnée par tout le monde. Par contre, j'aimerais ajouter que c'est une mauvaise façon de coder que de tenter de persister dans ta voie. L'intérêt d'ajax c'est son asynchronisme; tenter de vouloir récupérer le résultat d'une requête dans le code appelant, c'est a dire de passer outre le système de callback ne peut qu'être source de nombreux problèmes, donc visiblement tu es déja la victime.

    Si tu as d'autres instructions à exécuter avec le résultat de ta requête, elles doivent être déclarées DANS le callback, de cette façon, elles seront exécutées dès que le résultat sera disponible, et non avant (ce qui semble être la logique même).

  4. #24
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par DoubleU Voir le message
    La cause de ton problème a été donnée par tout le monde. Par contre, j'aimerais ajouter que c'est une mauvaise façon de coder que de tenter de persister dans ta voie. L'intérêt d'ajax c'est son asynchronisme; tenter de vouloir récupérer le résultat d'une requête dans le code appelant, c'est a dire de passer outre le système de callback ne peut qu'être source de nombreux problèmes, donc visiblement tu es déja la victime.

    Si tu as d'autres instructions à exécuter avec le résultat de ta requête, elles doivent être déclarées DANS le callback, de cette façon, elles seront exécutées dès que le résultat sera disponible, et non avant (ce qui semble être la logique même).

    pourquoi est-ce une mauvaise facon de cod ?
    je récupère les propriétés d'un objet cote server et je souhaite passer ces infos à une fonction template pour creer le formulaire adapté ;
    Bon, merci quand même de m'avoir répondu et je vous souhaite une bone journée.
    Cordialement.

  5. #25
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par zenzo Voir le message
    Bon, merci quand même de m'avoir répondu et je vous souhaite une bone journée.

    Laisser tomber parce qu'on te fait des remarques ne va pas corriger ton problème

    Tu as essayé le test que je te proposais ?

    A+

  6. #26
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Citation Envoyé par zenzo Voir le message
    je récupère les propriétés d'un objet cote server et je souhaite passer ces infos à une fonction template pour creer le formulaire adapté ;
    Tu es d'accord que tu va créer le formulaire sitôt que tu as reçu les donnée du
    serveur ? Donc l'appel à la fonction de création de ton formulaire doit se faire
    depuis la callback, sinon comment fera tu pour savoir quand l'appeler ?

    Citation Envoyé par zenzo Voir le message
    pourquoi est-ce une mauvaise facon de cod ?
    Parce que dans une application Ajax il est fréquent qu'un code de lancement de requête comme celui-ci soit appelé plusieurs fois avant même le retour de la première requête. Travailler avec une variable globale, c'est prendre le risque que
    celle-ci soit écrasée par le résultat d'une requête successive.

  7. #27
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par E.Bzz Voir le message

    Laisser tomber parce qu'on te fait des remarques ne va pas corriger ton problème

    Tu as essayé le test que je te proposais ?

    A+
    le test avec un bouton fonctionne sauf que je ne comprend pas pourqoui il faudrait attendre la fin du chargement du dom pour avoir la valeur
    j'ai une variable
    je fais un appel ajax et je récupère ma valeur pour est-ce que le chargement dom
    doit intervenir ?
    Merci beaucoup à tous de m'avoir répondu !

  8. #28
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par zenzo Voir le message
    le test avec un bouton fonctionne sauf que je ne comprend pas pourqoui il faudrait attendre la fin du chargement du dom pour avoir la valeur
    j'ai une variable
    je fais un appel ajax et je récupère ma valeur pour est-ce que le chargement dom
    doit intervenir ?
    Merci beaucoup à tous de m'avoir répondu !
    Ce n'est pas le chargement du DOM qu'il faut que tu attendes, c'est le retour de ton appel Ajax afin de pouvoir utiliser le contenu du retour.

  9. #29
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par zenzo Voir le message
    le test avec un bouton fonctionne sauf que je ne comprend pas pourqoui il faudrait attendre la fin du chargement du dom pour avoir la valeur
    C'est que ce n'est pas un problème de DOM (mais si le terme a été utilisé précédemment).
    Je pense plutôt qu'il y a confusion entre déclaration de ta fonction et son exécution
    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
    var mydata="init_value";
               function getData(result)     // Déclaration de getData()
               {                                    // Déclaration de getData()
                    mydata=result;            // Déclaration de getData()
               }                                    // Déclaration de getData()
               $.ajaxSettings.url='test.php';
               $.ajaxSettings.success=getData; // FUTURE exécution de getData()
               $.ajax();
               //test
               alert(mydata);  // mydata=="init_value"
    ....
    // évènements dans la page
    // Appel Ajax
    // Callback => exécution getData() => mydata=result;
    // alert(mydata);  => mydata==result
    A+

  10. #30
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    A tout hasard, même si le problème posé n'est pas identique, la solution proposée par marcha dans ce thread permet également de "différer" l'exécution du callback (ce que je n'avais pas réussi à faire ).
    A consulter éventuellement... ^^
    ----------------------------------------------------
    Citation Envoyé par E.Bzz
    Ce que le monsieur essaye de t'expliquer
    marcha ? le... monsieur ?

  11. #31
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Citation Envoyé par RomainVALERI Voir le message
    permet également de "différer" l'exécution du callback
    C'est déjà le cas ici, la requête est asynchrone, la fonction callback est appelée par
    JQuery lors de la réponse du serveur.

    @zenzo Puisque RV en parle, ça me fait penser de te demander si tu a bien une
    requête asynchrone ? et que tu ne t'attends pas à un comportement synchrone ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Problème de variables globales / locales
    Par onigami dans le forum Général Java
    Réponses: 9
    Dernier message: 06/03/2008, 14h01
  2. Réponses: 7
    Dernier message: 15/11/2007, 14h41
  3. Variable globale et locale
    Par momo70 dans le forum MATLAB
    Réponses: 1
    Dernier message: 03/07/2007, 09h49
  4. variables globales ou locales
    Par exhortae dans le forum C
    Réponses: 6
    Dernier message: 09/04/2007, 01h29
  5. variable globale ou locale pour CurrentDB
    Par jibouze dans le forum VBA Access
    Réponses: 7
    Dernier message: 30/05/2006, 17h15

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