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

AJAX Discussion :

[AJAX] Fonctions ajax imbriquées


Sujet :

AJAX

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut [AJAX] Fonctions ajax imbriquées
    Bonjour,

    Dans une fonction Ajax, j'en ai une autre imbriquée qui vient m'affecter une variable (vendPrior) qui sera utilisée dans la première. Mon problème est que vendPrior est bien affectée dans la fonction imbriquée, mais que si je ne fais pas un alert(vendPrior) dans ma première avant d'effectuer mon send, vendPrior qui devrait être affectée dans ma seconde fonction est envoyée non affectée. Par contre, si je fais un alert(vendPrior), elle est envoyée correctement affectée.

    Voici ma fonction :

    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
    function chargerQuestionnaire(index)
     {
      xhrQuestionnaire=getXhr();
     
      xhrQuestionnaire.onreadystatechange = function()
       {
        if(xhrQuestionnaire.readyState == 4 && xhrQuestionnaire.status == 200)
         {
          var retour = xhrQuestionnaire.responseText;
     
          if(retour[0] == '0')
           {
            window.location.href="sip:" + retour;
            window.location.href="../interfaces/interface.php?fichier=questionnaire.inc&titre=Questionnaire&index=" + index;
           }
          else
           document.getElementById('erreur').innerHTML = retour;
         }
       }
     
      xhrQuestionnaire.open("POST",'../transferts/chargerCible.php',true);
     
      xhrQuestionnaire.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     
      var vendPrior = '';
     
      if(index == -1) //Dans le cas où l'appel se fait à la suite de la clôture d'un suivi
       {
        for(var i = 0; i< document.getElementById('vendPrior').options.length; i++)
         {
          if(document.getElementById('vendPrior').options[i].selected == true)
           vendPrior = vendPrior + document.getElementById('vendPrior').options[i].value + ';';
         }
     
        vendPrior = vendPrior.substring(0, vendPrior.length - 1); //Pour supprimer le dernier ';'
       }
      else //Dans le cas où l'appel se fait depuis l'interface de présentation des campagnes
       {
        xhrVend=getXhr();
     
        xhrVend.onreadystatechange = function()
         {
          if(xhrVend.readyState == 4 && xhrVend.status == 200)
           vendPrior = xhrVend.responseText;
         }
     
        xhrVend.open("POST",'../transferts/recupVendPrior.php',true);
     
        xhrVend.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     
        xhrVend.send("indexCamp=" + index);
       }
     
      xhrQuestionnaire.send("index=" + index + "&vendPrior=" + vendPrior);
     }
    Quelqu'un aurait une idée?

    Merci d'avance

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    J'ai trouvé d'où provenait le problème. AJAX, de part son nom, travaille en asynchrone. Dès lors, le thread lancé par ma fonction principale se poursuit sans attendre le résultat de la fonction imbriquée qui elle a lancé un thread parrallèle.

    J'ai donc modifié le code précédent de cette manière :

    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
    function chargerQuestionnaire(index)
     {
      if(index == -1) //Dans le cas où l'appel se fait à la suite de la clôture d'un suivi
       suiteCharQuest(-1, "");
      else //Dans le cas où l'appel se fait depuis l'interface de présentation des campagnes
       recupVendPrior(index);
     }
     
    function recupVendPrior(index)
     {
      xhrVendPrior=getXhr();
     
      xhrVendPrior.onreadystatechange = function()
       {
        if(xhrVendPrior.readyState == 4 && xhrVendPrior.status == 200)
         suiteCharQuest(index, xhrVendPrior.responseText);
       }
     
      xhrVendPrior.open("POST",'../transferts/recupVendPrior.php',true);
     
      xhrVendPrior.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     
      xhrVendPrior.send("indexCamp=" + index);
     }
     
    function suiteCharQuest(index, vendPrior)
     {
      xhrQuestionnaire=getXhr();
     
      xhrQuestionnaire.onreadystatechange = function()
       {
        if(xhrQuestionnaire.readyState == 4 && xhrQuestionnaire.status == 200)
         {
          var retour = xhrQuestionnaire.responseText;
     
          if(retour[0] == '0')
           {
            window.location.href="sip:" + retour;
            window.location.href="../interfaces/interface.php?fichier=questionnaire.inc&titre=Questionnaire&index=" + index;
           }
          else
           document.getElementById('erreur').innerHTML = retour;
         }
       }
     
      xhrQuestionnaire.open("POST",'../transferts/chargerCible.php',true);
     
      xhrQuestionnaire.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     
      if(index == -1) //Dans le cas où l'appel se fait à la suite de la clôture d'un suivi
       {
        for(var i = 0; i< document.getElementById('vendPrior').options.length; i++)
         {
          if(document.getElementById('vendPrior').options[i].selected == true)
           vendPrior = vendPrior + document.getElementById('vendPrior').options[i].value + ';';
         }
     
        vendPrior = vendPrior.substring(0, vendPrior.length - 1); //Pour supprimer le dernier ';'
       }
     
      xhrQuestionnaire.send("index=" + index + "&vendPrior=" + vendPrior);
     }
    Et tout roule...

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/06/2009, 13h20
  2. [AJAX] fonction Ajax
    Par aztec dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/05/2008, 20h00
  3. Réponses: 6
    Dernier message: 13/07/2007, 11h46
  4. [AJAX] fonction js
    Par Empty_body dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/11/2006, 16h42
  5. [AJAX] aide sur fonction ajax navigation
    Par speedylol dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/11/2006, 14h17

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