eddie5150
Messages postés34Date d'inscriptionsamedi 19 novembre 2005StatutMembreDernière intervention20 octobre 2008
-
21 oct. 2007 à 22:56
eddie5150
Messages postés34Date d'inscriptionsamedi 19 novembre 2005StatutMembreDernière intervention20 octobre 2008
-
22 oct. 2007 à 17:37
Bonjour à tous,
je viens de me lancer dans AJAX, mais je ne comprends pas encore tout très bien,
aussi j'ai essayé d'effectuer une vérification automatique de mail dans un formulaire, jusque là, c'est du Javascript, tout va bien, cependant, il me faudrait également vérifier si ce mail n'est pas déjà présent dans ma BDD.
Voila comment je procede :
function verif_mail()
{
//Différentes vérifications ....
if(!verifDoublon(mail))
alert("Doublon");
}
function verifDoublon(mail)
{
var xhr_object = null;
if(window.XMLHttpRequest) // Firefox
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // Internet Explorer
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else
{ // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
}
cs_AlexN
Messages postés694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 201419 22 oct. 2007 à 15:50
En mode asynchrone, l'execution du code de gestion du retour est différée.
Tu ne peux pas faire :
if(!verifDoublon(mail))
alert("Doublon");
Parce que l'execution retourne immédiatement après le send(). et dans ton cas la fonction ne retourne rien.
Deux solutions :
- lancer le verifDoublon et gérer la reponse dans le callback
- mettre en place un mécanisme de timeout sur la requete (une sorte de sleep) avant de decider de traiter la réponse.
Pour faire simple, si tu n'a pas besoin de mécanisme asynchrone, ne les utilises pas.
cs_AlexN
Messages postés694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 201419 22 oct. 2007 à 13:20
Tu utilises l'objet xmlhttprequest en mode synchrone :
xhr_object.open("POST", "requete.php", false);
La fonction de callback (onreadystatechange ) n'a pas d'utilité dans ce cas.
Il suffit de mettre le code de traitement de la réponse juste après le send()
xhr_object.send("mail="+mail); // L'éxécution du code est bloquée jusqu'au retour de la réponse (mode synchrone)
if(xhr_object.readyState == 4)
{
if(xhr_object.status == 200)
if(xhr_object.responseText == '0')
return true;
else
return false;
else
alert("Erreur: "+xhr_object.status);
}
return false;