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 :

ordre d'execution javascript


Sujet :

JavaScript

  1. #1
    Membre averti
    Inscrit en
    Septembre 2012
    Messages
    42
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2012
    Messages : 42
    Par d�faut ordre d'execution javascript
    Bonjour,

    j'ai �crit un fonction en JS pour faire un insert en base puis rediriger l'internaute vers une autre fenetre. pour �a j'utilise un XMLHTTPRequest qui fonctionne tr�s bien sans la redirection. en effet quand je mets en place les condition de redirection il fait la redirection avant de faire la requete.

    voici le code:
    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
    function insert(){
      var carte=getRadioVal('carte');
      var nom = document.getElementById('champsnom');
      var nom_value = nom.value;
      var prenom = document.getElementById('champsprenom');
      var prenom_value = prenom.value;
      var mail = document.getElementById('champsmail');
      var mail_value = mail.value;
      var type=getRadioVal('typo');
      if (type=='typpf'){
        var nommag=document.getElementById('searchp');    
      }
      if (type=='typst'){
        var nommag=document.getElementById('searchs');    
      }
      if (type=='typmg'){
        var nommag=document.getElementById('searchm');    
      }
      var mag_value=nommag.value; 
      db.transaction(
        function(t){
          t.executeSql("INSERT INTO gvappprod VALUES (?,?,?,?,?)", [nom_value,prenom_value,mail_value,mag_value,carte]);
              }
      );
      if (window.navigator.onLine){
      db.transaction(
        function(t){
          t.executeSql("SELECT nom AS nom, prenom AS prenom, mail AS mail, enseigne AS enseigne, choix AS choix FROM gvappprod",[],function(t,r){
            for (var i=0;i<r.rows.length;i++){
              nomloc=r.rows.item(i).nom;
              prenomloc=r.rows.item(i).prenom;
              mailloc=r.rows.item(i).mail;
              magloc=r.rows.item(i).enseigne;
              choixloc=r.rows.item(i).choix;
              //alert(mailloc);
              xhr = new XMLHttpRequest();
              xhr.open("GET", "insert.php?nom=" + nomloc + "&prenom=" + prenomloc + "&mail=" + mailloc + "&mag=" + magloc + "&choix=" + choixloc, true);
              alert ('on fait le send');
              xhr.send(null);
              }
            });
          }
      );
      vidange();
      }
      resetform();
      if (sessionStorage.getItem("page")=="1") {
        alert("onpart sur fin");
        //window.location.href='fin.html';
      } else {
        alert("onpart sur mobile");
        //window.location.href='trans.html';
      }
    };
    il fait "alert("onpart sur fin");" avant de faire "alert ('on fait le send');" du coup j'ai rien en base.

    je ne vois pas d'erreur pourtant. je pensait que JS s'ex�cutait de haut en bas. si c'est une erreur d'accolade ou de point virgule, je ne vois pas ou elle est.

    d'avance merci pour votre aide.

  2. #2
    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 : 55
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par d�faut
    je pensait que JS s'ex�cutait de haut en bas
    Sauf dans le cas de code asynchrone comme le sont souvent les requ�tes AJAX.
    Voir : Un classique AJAX : utiliser les donn�es au bon moment !
    Pas de question technique par MP !
    Tout le monde peut participer � developpez.com, vous avez une id�e, contactez-moi !
    Mes formations video2brain : La formation compl�te sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'int�gration de JSFiddle et CodePen sur le forum

  3. #3
    Membre averti
    Inscrit en
    Septembre 2012
    Messages
    42
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2012
    Messages : 42
    Par d�faut
    ok, je comprend bien la nuance maintenant. c'est normal.
    c'est rassurant finalement.
    est ce que tu aurait le m�me exemple que pour ton post explicatif mais avec le callback qui fonctionne? je l'adapterai � ma sauce ensuite.
    Merci pour ton aide.

  4. #4
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par d�faut
    Le callback qui fonctionne ?
    Dans l'exemple de Bovino, ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    xhr.onreadystatechange = function(){ 
        if(xhr.readyState == 4 && xhr.status == 200){ 
            monResultat = xhr.responseText; 
            alert(monResultat); 
        } 
    };
    ... le "callback" est en rouge. Quand la requ�te c�t� serveur est termin�e/les donn�es re�ues (xhr.readyState === 4) et la page dans un bon �tat (xhr.status === 200), tu peux faire ton traitement.
    soit tu mets le code "en vrac" comme ci-dessus. C'est alors plut�t un code de callback Soit tu d�finis une fonction et tu l'appelles � la place de ce code:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     // Fonction callback
    function callback(monResultat) {
      // faire ce que tu veux avec monResultat
    }
     
    if(xhr.readyState == 4 && xhr.status == 200){ 
      callback(xhr.responseText);
    }

  5. #5
    Membre averti
    Inscrit en
    Septembre 2012
    Messages
    42
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2012
    Messages : 42
    Par d�faut
    Je vois, mais mon probl�me ici n'est pas d'utiliser ce qui sort de mon xhr mais seulement de savoir quand il a fini... pour faire une redirection.

    Comment fait-on pour qu'AJAX finisse son boulot (quel feignasse!), soit synchrone et pas casse- couille?

  6. #6
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par d�faut
    Le code que tu souhaites ex�cuter apr�s que le xhr a fini son boulot doit �tre dans une fonction de callback, tu n'as pas le choix !

    Si j'ai bien compris, c'est ce code que tu souhaites faire � la fin de l'appel AJAX ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    resetform();
    if (sessionStorage.getItem("page")=="1") {
      alert("onpart sur fin");
      //window.location.href='fin.html';
    } else {
      alert("onpart sur mobile");
      //window.location.href='trans.html';
    }
    Et bien il faut le mettre dans le callback, c'est tout

    Pour reprendre l'analogie de Bovino, il faut attendre que ton pote revienne du poulailler pour faire l'omelette ! Sinon, sans les oeufs, comment veux-tu la faire ? On fait pas d'omelette sans casser les coui***, euh, les oeufs pardi

  7. #7
    Membre averti
    Inscrit en
    Septembre 2012
    Messages
    42
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2012
    Messages : 42
    Par d�faut
    Avec toute ces infos, je m'en suis finalement sorti. J'ai fait ma requ�te dans la page de r�sultat, apr�s la redirection.
    MErci pour votre aide!

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [javascript] ordre d'execution des functions ?
    Par gretch dans le forum G�n�ral JavaScript
    R�ponses: 2
    Dernier message: 13/08/2009, 15h51
  2. [AJAX] Executer Javascript charg� par Ajax
    Par Sylvain71 dans le forum G�n�ral JavaScript
    R�ponses: 16
    Dernier message: 13/12/2007, 23h14
  3. comment forcer l'execution javascript
    Par jj del amorozo dans le forum G�n�ral JavaScript
    R�ponses: 6
    Dernier message: 06/03/2006, 17h24
  4. R�ponses: 5
    Dernier message: 29/12/2005, 13h47
  5. probleme ordre d'execution de ma page asp
    Par Shosho dans le forum ASP
    R�ponses: 5
    Dernier message: 10/05/2005, 14h51

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