Partage
  • Partager sur Facebook
  • Partager sur Twitter

[JS] Faire une pause

Sujet résolu
Anonyme
    17 août 2006 à 1:41:54

    Bonne nuit...

    Est'il possible de faire une pause dans un script ?
    Car il faut que j'attende le résultat d'une focntion pour continuer.
    • Partager sur Facebook
    • Partager sur Twitter
      17 août 2006 à 10:07:16

      C'est très bizarre ton truc !!!

      Il n'est pas à ma connaissance possible de faire une pause. Mais il est possible de lancer une fonction après un certain temps (ce qui revient au même, finalement), avec setTimeOut().

      Ca devrait normalement te suffir. Mais dis moi, que veux-tu attendre en réalité (j'avoue que je n'ai pas tout compris) ?
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        17 août 2006 à 10:14:13

        Si tu souhaites attendre un certain évènement, tu peux aussi peut-être utiliser une boucle, non ?
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          17 août 2006 à 10:18:51

          Voilà une petite partie de mon script :
          // --------- Vérification avant envoie ------------------------- //
          function verif() {
          verif_pseudo();
          verif_modepass();
          verif_mail();

          var annee = document.inscription.annee.value;

          if ((dispo_pseudo == 'non') || (dispo_mail == 'non') || (modepass == 'non')) { return false; }
          if (annee.search(/^[12]+[90]+[0-9]+[0-9]$/) == -1) { return false; }
          }

          Je doit attendre le résultats des fonctions verif_pseudo() et verif_mail() avant de continuer. Le problèmle ce que leur résultats (dispo_pseudo et dispo_mail) ne sont pas instannée, la cause : j'utilise AJAX et PHP pour vérifier que le pseudo ou le mail n'éxiste pas dans la base de donnée.


          Je vais reposer ma question :
          Est t'il possible de faire un truc dans ce style :
          TANT QUE variable_a NE CORRESPOND PAS A ok ON ATTEND
          ?
          • Partager sur Facebook
          • Partager sur Twitter
            17 août 2006 à 11:28:21

            Si je te l'ai demandé, c'est parceque je me doutais que c'était par AJAX !

            Regarde ce tuto : lors d'un changement d'état de la requête, il donne des recommandations (ici, il vérifie si le tout est arrivé, état 4, et fait les actions en conséquences) :
            xhr.onreadystatechange = function() // définition de la fonction de traitement
                    {
                    if (xhr.readyState == 4)
                        {
                        //traitement des données
                        }


            Voilà, pense à regarder les tutos, c'est une incroyable mine d'or. Ici, tu a la solution à ton problême, d'une façon beaucoup plus simple et efficace.
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              17 août 2006 à 11:34:38

              if (xhr.readyState == 4)
              J'ai lu ce tuto, mais le problème n'est pas là.

              function verif() {
              verif_pseudo();
              verif_modepass();
              verif_mail();
              .... }

              Cette fonction est une focntion appeler lorsque l'utilisateur clique sur envoyer. Malgré qu'il faut un certain temps pour éxécuté verif_pseudo() et verif_mail(), la fonction continu et passe à la suite. Il faut que je fasse attendre ma fonction verif() avec un truc du genre : TANT QUE variable_a NE CORRESPOND PAS A ok ON ATTEND.

              Enfin, si c'est possible...
              • Partager sur Facebook
              • Partager sur Twitter
                17 août 2006 à 12:17:10

                Alors j'ai une autre idée : pour le formulaire, tu mets onsubmit="verif(); return false;" (je rajoute le return false pour pas que le formulaire ne se valide).

                Ensuite, chacune de tes fonctions verif_pseudo(), verif_mail() ... qui font appelle à l'AJAX, disent d'appeler des fonctions accepte_pseudo(), accepte_mail() ... lorsque la réponse arrive. Ces autres fonctions vont d'abord vérifier si la réponse de l'AJAX est positive. Si oui, ils s'occupe d'une variable globale que l'on va appeler ... validation. Par exemple, si la réponse d'AJAX de verif_pseudo() est juste, accepte_pseudo() va faire validation['pseudo'] = true;. Enfin, elles appellent une derniere fonction, valider(), qui va vérifier si validation['pseudo'] et validation['mail'] et validation['...'] vallent true, et si oui, elle valide enfin le formulaire.

                Bon, comme je ne suis pas très clair, voila à quoi devrait ressembler le code. Imaginons que tu n'es que deux champs, pseudo et mail.
                Voila l'HTML, classique :
                <form onsubmit="verif(); return false;" id="formulaire" method="post" action="traitement.php">
                        <input type="text" name="pseudo" id="pseudo"/>
                        <input type="text" name="mail" id="mail"/>
                        <input type="submit"/>
                </form>


                Et le Javascript de la page :
                // la variable pour ragarder chaque résultat
                var validation = new Array();

                function verif()
                        {
                        // la fonction verif(), comme tu l'as
                        verif_pseudo();
                        verif_mail();
                        }

                function verif_pseudo()
                        {
                        /*la, on dit que ya de l'ajax et tout
                        et la, la fonction appelée lorsque la requete est finie*/

                                accepte_pseudo();
                        }
                                       
                function verif_mail()
                        {
                        /*la, on dit que ya de l'ajax et tout
                        et la, la fonction appelée lorsque la requete est finie*/

                                accepte_mail();
                        }

                function accepte_pseudo()
                        {
                        /*la on vérifie la requete et tout
                        que je vais simuler par regarder si le champs est vide*/

                        if(document.getElementById('pseudo').value != '')
                                {
                                validation['pseudo'] = true;
                                }
                        else
                                {
                                validation['pseudo'] = false;
                                }
                        /*et la fonction qui va tout valider
                        je la mets à chaque fonction,
                        car on ne sait pas quelle requête finira la dernière*/

                        valider();
                        }

                function accepte_mail()
                        {
                        /*la on vérifie la requete et tout
                        que je vais simuler par regarder si le champs est vide*/

                        if(document.getElementById('mail').value != '')
                                {
                                validation['mail'] = true;
                                }
                        else
                                {
                                validation['mail'] = false;
                                }
                        /*et la fonction qui va tout valider
                        je la mets à chaque fonction,
                        car on ne sait pas quelle requête finira la dernière*/

                        valider();
                        }
                                               
                function valider()
                        {
                        // on vérifie si toutes les réponses sont positives
                        if(validation['mail'] && validation['pseudo'])
                                {
                                // et on valide !
                                document.getElementById('formulaire').submit();
                                }
                        }


                J'espère que mon exemple a été assez clair. Je ne l'ai pas fait avec de l'AJAX, car je ne m'y connais pas trop en AJAX, et il faudrait faire un script PHP, démarre easyPHP ... c'est beaucoup plus simple comme ça pour les tests. Je pense que tu ne devrais pas avoir trop de problême à le faire à la sauce AJAX, ici, c'est juste la structure principale. N'oublie pas de valider le formulaire si AJAX fait une erreur : il faudrait quand même pouvoir valider le formulaire en cas de bug et laisser à PHP uniquement le travail.
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  17 août 2006 à 13:01:47

                  EXCELLENT, MERÇI MERÇI shuss

                  J'ai repris l'idée de ton script et voilà ce que sa donne :

                  Le résultats en image : http://www.luigifab.info/Membres/inscription.htm
                  et le script :

                  var validation = new Array();


                  // -------- Vérification de la disponibilité du pseudo ------------- //
                  function verif_pseudo() {
                  var pseudo = document.inscription.pseudo.value;


                  // ----- si pseudo pas ok -------------------- //
                  if (pseudo.search(/^[_0-9A-Za-z-éèêîîàç]*$/) == -1) { document.getElementById('img_pseudo').innerHTML="<img src='../images/statut_erreur.gif' alt='incorrect'> &nbsp;pas d'espace ni de caractères trop spéciaux";
                  validation['pseudo'] = false; }

                  else if (pseudo.length < 4) { document.getElementById('img_pseudo').innerHTML="<img src='../images/statut_erreur.gif' alt='incorrect'> &nbsp;4 caractères minimum";
                  validation['pseudo'] = false; }



                  // ----- si pseudo apparament ok ------------- //
                  else {

                  var xhr;
                  if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); }
                  else if (window.ActiveXObject) { xhr = new ActiveXObject('Microsoft.XMLHTTP'); }


                  if (xhr) {
                  var page = "./verif_dispo.php5?pseudo=" + pseudo;
                  xhr.open('GET', page, true);


                  xhr.onreadystatechange = function() {

                  if ((xhr.readyState == 1) || (xhr.readyState == 2) || (xhr.readyState == 3)) {
                  document.getElementById('img_pseudo').innerHTML="<img src='../images/statut_cherche.gif' alt='vérification...'>";
                  }

                  if (xhr.readyState == 4) {
                  var reponse = xhr.responseText;

                  // ---- pseudo déjà utilisé ----- //
                  if (reponse == "1") {
                  document.getElementById('img_pseudo').innerHTML="<img src='../images/statut_attention.gif' alt='incorrect'> &nbsp;Le pseudo est déjà utilisé";
                  validation['pseudo'] = false; }

                  // ---- pseudo libre ------------ //
                  if (reponse == "0") {
                  document.getElementById('img_pseudo').innerHTML="<img src='../images/statut_ok.gif' alt='ok'>";
                  validation['pseudo'] = true; valider(); }  }

                  }


                  xhr.send(null); }
                  }

                  }







                  // -------- Vérification si l'adresse mail existe déjà ------------- //
                  function verif_mail() {
                  var adresse = document.inscription.mail.value;
                  var longueur = adresse.length;


                  // ----- si mail pas ok -------------------- //
                  if (adresse.search(/^[_a-z0-9-][_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-][a-z0-9-]+(\.[a-z0-9][a-z0-9]+)+$/) == -1) { document.getElementById('img_mail').innerHTML="<img src='../images/statut_erreur.gif' alt='incorrect'>";
                  validation['mail'] = false; }



                  // ----- si mail apparament ok ------------- //
                  else {

                  var xhr;
                  if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); }
                  else if (window.ActiveXObject) { xhr = new ActiveXObject('Microsoft.XMLHTTP'); }


                  if (xhr) {
                  var page = "./verif_dispo.php5?mail=" + adresse;
                  xhr.open('GET', page, true);


                  xhr.onreadystatechange = function() {

                  if ((xhr.readyState == 1) || (xhr.readyState == 2) || (xhr.readyState == 3)) {
                  document.getElementById('img_mail').innerHTML="<img src='../images/statut_cherche.gif' alt='vérification...'>";
                  }

                  if (xhr.readyState == 4) {
                  var reponse = xhr.responseText;

                  // ----- mail déjà utilisé ------ //
                  if (reponse == "1") {
                  document.getElementById('img_mail').innerHTML="<img src='../images/statut_attention.gif' alt='attention'> &nbsp;L'adresse mail est déjà utilisée";
                  validation['mail'] = false; }

                  // ----- mail libre ------------- //
                  if (reponse == "0") {
                  document.getElementById('img_mail').innerHTML="<img src='../images/statut_ok.gif' alt='ok'>";
                  validation['mail'] = true; valider(); }  }

                  }


                  xhr.send(null); }
                  }

                  }







                  // --------- Vérification mot de passe ----------------------------- //
                  function verif_modepass() {
                  var cham_modepass = document.inscription.modepass.value;


                  // ----- si mot de passe pas ok ------ //
                  if (cham_modepass.search(/^[a-zA-Z0-9]*$/) == -1) { document.getElementById('img_modepass').innerHTML="<img src='../images/statut_erreur.gif' alt='incorrect'> &nbsp;lettres ou chiffres seulement";
                  validation['modepass'] = false; }

                  else if (cham_modepass.length < 4) { document.getElementById('img_modepass').innerHTML="<img src='../images/statut_erreur.gif' alt='incorrect'> &nbsp;4 caractères minimum";
                  validation['modepass'] = false; }


                  // ----- si mot de passe ok ---------- //
                  else { document.getElementById('img_modepass').innerHTML="<img src='../images/statut_ok.gif' alt='ok'>";
                  validation['modepass'] = true; valider(); }

                  }







                  // --------- Vérification avant envoie ----------------------------- //
                  function verification() {
                  verif_modepass();
                  verif_pseudo();
                  verif_mail();
                  }



                  function valider() {
                  if (validation['pseudo'] && validation['mail'] && validation['modepass']) {

                  if (document.inscription.annee.value.search(/^[12]+[90]+[0-9]+[0-9]$/) != -1) { document.getElementById('inscription').submit(); }
                  }
                  }
                  • Partager sur Facebook
                  • Partager sur Twitter

                  [JS] Faire une pause

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown