Probleme formulaire ajax

rollings4 Messages postés 19 Statut Membre -  
rollings4 Messages postés 19 Statut Membre -
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. rollings4 Messages postés 19 Statut Membre
     
    up!!!!!ya personne pour m'aider!!
    0
  2. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    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.
    0
  3. rollings4 Messages postés 19 Statut Membre
     
    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.
    0
  4. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Ajoute aussi un "return" avant "verif()" (quand tu appelles cette fonction, dans onsubmit je suppose).
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. rollings4 Messages postés 19 Statut Membre
     
    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???
    0
  7. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Quel est ton code actuel ?
    Utilise la balise "code" sur CCM, ou un pastebin (gist.github.com, paste.pocoo.org, ...).
    0
  8. rollings4 Messages postés 19 Statut Membre
     
    
     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/>
    ...
    
    
    0