Probleme formulaire ajax

Bonjour, jai un probleme avec mon code ajax , j'essaie de vérifier des données envoyées par un formulaire dans la base de données , bon tout marche bien ,je récupère bien la réponse envoyée par le fichier php , je reussi à la tester et a envoyer le message d'erreur si l'email existe déja ,mais je n'arrive pas a arreter l'exécution s'il ya erreur dans l'email , c'est à dire qu'on affiche l'erreur mais le formulaire va toujours .

function request(callback) {
var email = document.getElementById("email").value;

var xhr = getXMLHttpRequest();

xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
callback(xhr.responseText);
document.getElementById("loader").style.display = "none";
} else if (xhr.readyState < 4) {
document.getElementById("loader").style.display = "inline";
}
};

xhr.open("GET", "XMLHttpRequest_getSleep.php?email=" + email, true);
xhr.send(null);
}

function readData(sData) { //fonction qui récupère valeur retournée par php
, vaut 1 si l'email n'a pas encore été utilisée et 0 si
elle a été utilisée
var div = sData;

if(div==1)
{

document.form_inscript.submit();
}
if(div==0)
{
writediv("Cette adresse email a deja été utilisée");
return false;
}

}

function verif() //la fonction qui est appellée au submit du formulaire
{

picdiv('<img src="images/charg.gif"/">');

nom = document.getElementById('nom').value ;
prenom = document.getElementById('prenom').value ;
email = document.getElementById('email').value ;
pass = document.getElementById('pass').value ;
sexe = document.getElementById('sex').value;

if(nom.length == 0 || prenom.length == 0 || email.length == 0 || pass.length == 0 || sexe == 0)
{

setTimeout("writediv( 'Veuillez remplir tous les champs</span>')" , 1000);
setTimeout(" picdivno('')" , 1000);
return false;
}
else if(nom.length < 2 || prenom.length < 2 || email.length < 4 || pass.length < 6)
{
setTimeout("writediv(' Veuillez respecter les tailles prescrites')" ,1000);
setTimeout(" picdivno('')" , 1000);
return false;
}
else
{

request(readData); //ici on appelle la fonction qui
envoi les données au fichier php
setTimeout(" picdivno('')" , 2000);

}

}
je veux que mon formulaire soit envoyé selon l'erreur ou pas.merci

7 réponses

  1. Il faut utiliser « return false ».
    Dans verif(), quand tu appelles la fonction request() :
    return request(...);
    Dans la fonction request(), lorsque tu appelles le callback (readData) :
    return callback(...);
    Dans readData(), utilise "return false;" lorsqu'il faut bloquer le formulaire.
    1. merci pour ta réponse;
      j'ai mis les return mais le formulaire est quand même envoyé quand il y a erreur .
      ,lorsque je mets return false dans verif() le formulaire n'est pas envoyé quelque soit la réponse , et quand je l'enlève il est toujours envoyé , et quand je mets
      return request(readData); c'est quand meme envoyé .pour info le ficher php retourne comme réponse 0 ou 1.

      please help me.
      1. Ajoute aussi un "return" avant "verif()" (quand tu appelles cette fonction, dans onsubmit je suppose).
        1. oui j'ai déja mis un return là ba mais ça fonctionne pas, lorsque je met return xhr.responsetext , ça envoie le formulaire car xhr.responsetext est vide , est ce qu 'il n ya pas une méthode directe pour récupérer la réponse dans le fichier php???
          1. Quel est ton code actuel ?
            Utilise la balise "code" sur CCM, ou un pastebin (gist.github.com, paste.pocoo.org, ...).
            1. 
               function request(callback) 
               {
              	var email = document.getElementById("email").value;
              	
              	var xhr = getXMLHttpRequest();
              	
              	xhr.onreadystatechange = function() {
              		if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
              			return callback(xhr.responseText);
              			
              			document.getElementById("loader").style.display = "none";
              		} else if (xhr.readyState < 4) {
              			document.getElementById("loader").style.display = "inline";
              		}
              	};
              	
              	xhr.open("GET", "XMLHttpRequest_getSleep.php?email=" + email, true);
              	xhr.send(null);
              	
              }
              
              function readData(sData) {
                            var div = sData;
                            
              	      if(div==1)
              	      {
              	      
              	      return true;
              	      }
              	      if(div==0)
              	      {
              	      writediv("Cette adresse email a deja été utilisée");
              	      return false;
              	      }
              	      
                                       }
                    
                    
                    function verif()
                    {
                    
                     picdiv('<img src="images/charg.gif"/">');
                    
                    nom = document.getElementById('nom').value ;
                    prenom = document.getElementById('prenom').value ;
                    email = document.getElementById('email').value ;
                    pass = document.getElementById('pass').value ;
                    sexe = document.getElementById('sex').value;
                    
                       if(nom.length == 0 || prenom.length == 0 || email.length == 0 || pass.length == 0 || sexe == 0)
                       {
                       
                       setTimeout("writediv( 'Veuillez remplir tous les champs</span>')" , 1000); 
                       setTimeout(" picdivno('')" , 1000);
                       return false;
                       }
                       else if(nom.length < 2 || prenom.length < 2 || email.length < 4  || pass.length < 6)
                       {
                       setTimeout("writediv(' Veuillez respecter les tailles prescrites')" ,1000); 
                       setTimeout(" picdivno('')" , 1000);
                       return false;
                       }
                       else
                       { 
                       
                         
                         
                         setTimeout(" picdivno('')" , 2000);
                         return request(readData);
                       
                       
                       }
                    
                    }
                  // et voici le ficher php
              
              <?php include("database.php");
              
              header("Content-Type: text/plain");
              
              $email = (isset($_GET["email"])) ? $_GET["email"] : NULL;
              $req=mysql_query("SELECT * FROM user WHERE email ='".$email."'");
              $res=mysql_num_rows($req);
              
              
              if ($res == 0) 
              {
              	sleep(2);
              	echo 1;
              } 
              else 
              {
              	sleep(2);
              	echo 0;
              }
              
              ?>
              
              // ainsi que le formulaire 
              
              <form method="post" action="index.php" id="form_inscript" name ="form_inscript" onsubmit="return verif(this)" >
                  <div class="div_label_inscript"><label class="label_inscript" for=""> Nom</label></div> : <input id="nom" name ="nom" onkeyUp="verif2(this.value)" onblur="onput(this.value)"  class="input_inscript" size="22" type="text" name="nom" /><br/>
                  <div class="div_label_inscript"><label class="label_inscript" for=""> Prénoms</label></div> : <input id="prenom" name="prenom" class="input_inscript" size="22" type="text" onkeyUp="verif2(this.value)" onblur="onput(this.value)" name="prenom" /><br/>
              ...