Probleme formulaire ajax

Fermé
rollings4 Messages postés 12 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 18 juin 2010 - 18 juin 2010 à 11:54
rollings4 Messages postés 12 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 18 juin 2010 - 18 juin 2010 à 14:30
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

rollings4 Messages postés 12 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 18 juin 2010
18 juin 2010 à 12:48
up!!!!!ya personne pour m'aider!!
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 498
18 juin 2010 à 12:52
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
rollings4 Messages postés 12 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 18 juin 2010
18 juin 2010 à 13:50
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
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 498
18 juin 2010 à 13:54
Ajoute aussi un "return" avant "verif()" (quand tu appelles cette fonction, dans onsubmit je suppose).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rollings4 Messages postés 12 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 18 juin 2010
18 juin 2010 à 14:07
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
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 498
18 juin 2010 à 14:12
Quel est ton code actuel ?
Utilise la balise "code" sur CCM, ou un pastebin (gist.github.com, paste.pocoo.org, ...).
0
rollings4 Messages postés 12 Date d'inscription samedi 26 juillet 2008 Statut Membre Dernière intervention 18 juin 2010
18 juin 2010 à 14:30

 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