IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

latence requete ajax pour validation


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Par défaut latence requete ajax pour validation
    Bonjour,

    Je me permets de vous soumettre un problème que je rencontre lors de la validation de mon formulaire.

    Celui-ci est composé entre autre d'un champ Pseudo, d'un champ Email, d'un champ Genre et d'un champ Age.

    Avant l'enregistrement des données dans la base je vérifie que tous les champs sont bien remplis et au bon format.

    Mais pour les champs email et pseudo je fais une requête ajax pour vérifier l'unicité du pseudo et de l'adresse email en base avant enregistrement.

    Par défaut tous mes flags : mail_valide, pseudo_valide, genre_valide etc sont à FALSE.

    Quand je clique sur le bouton d'enregistrement du formulaire, le script verifie tous les champs et met mes flags à true si tout est ok.

    Seulement le problème avec les requêtes ajax sur mes champs email et pseudo de vérification d'unicité prennent un certain temps avant d'avoir une réponse, si bien que mes flags ne sont pas mis à true avant que le script de vérification se termine.

    Je n'obtiens par conséquent jamais une validation totale de mes données pour permettre l'enregistrement en base.

    J'espère être assez clair et que vous pourrez m'apporter une solution.

    Bien cordialement

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 25
    Par défaut
    Bonsoir,

    A ce que je comprends, il suffit de rendre ton appel ajax synchrone non ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Par défaut
    Bonjour,

    Oui mais l'ajax synchrone c'est un peu dangereux non ? si le navigateur se bloque c'est un problème...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 25
    Par défaut
    Je propose ça en première approche, ça me permet de vérifier que j'ai bien compris le problème et pour toi d'être certain que c'est bien ton seul problème. Comme cette vérif ne coute rien, autant la faire, non ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Par défaut
    Oui c'est mon problème...mais j'essaie de trouver une solution alternative qui serait dans un premier temps de faire une vérification des formats des champs et si tout est OK sérialiser les données et les envoyer au serveur qui fera le controle des unicités sur les champs mail et pseudo et de retourner les éventuelles erreurs. Ce qui me permet de rester en asynchrone...

  6. #6
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Tu pourrais nous montrer un peu de code ? Parce que sinon, on nage un peu dans le vide...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Par défaut
    Voilà j'ai adapté une solution de callback et ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    appelVerifUniciteEmail();
     
    function verifUniciteEmail(callback)
    {
    	$.post("ajax/inscription.php",{ 'form_input_email':$('#form_input_email').val(), 'controle_unicite_email':'OK'} ,function(data)
    	{
    		unicite_email=data;
    		callback(unicite_email);
    	});
     
    }
     
    function appelVerifUniciteEmail()
    {
     	verifUniciteEmail(function(unicite_email){
    		if(unicite_email=="email_present"){alert("email deja en base");}
    		if(unicite_email=="email_unique"){alert("email non en base");
    	});
     
    }
    Mais ce que j'aimerais c'est que la fonction appelVerifUniciteEmail() me retourne la valeur de unicite_email.

    Pour avoir cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var verif_email = appelVerifUniciteEmail();
    if( verif_email =="email_present"){/* code*/}
    Des pistes ?

    Cordialement

  8. #8
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    Concernant votre version du code, je vous suggère de tester cette version corrigée (un ) ou } ou }) absent, je ne rappelle plus) :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    function verifUniciteEmail(callback){
    	$.post("ajax/inscription.php",{
    		'form_input_email': $('#form_input_email').val(),
    		'controle_unicite_email': 'OK'
    	}, function(data){
    		unicite_email=data;
    		callback(unicite_email);
    	});
    }
     
    function appelVerifUniciteEmail(){
    	var result = "";
     
     	verifUniciteEmail(function(unicite_email){
    		if (unicite_email == "email_present"){
    			alert("email deja en base");
    		} else if (unicite_email == "email_unique"){
    			alert("email non en base");
    		}
     
    		result = unicite_email;
    	});
     
    	return result;
    }
     
    var verif_email = appelVerifUniciteEmail();
     
    if( verif_email =="email_present"){/* code*/}

    Mais je ne comprends pas pourquoi la version simple ne fonctionne pas :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $.post("ajax/inscription.php",{
    	'form_input_email': $('#form_input_email').val(),
    	'controle_unicite_email': 'OK'
    }, function(data){
    	if (data == "email_present"){
    		alert("email deja en base");
     
    		/* code */
    	} else if (data == "email_unique"){
    		alert("email non en base");
    	}
    });

    Vous devriez préciser le datatype, le type de donnée retourné par le serveur, par exemple "text ":

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $.post("ajax/inscription.php",{
    	'form_input_email': $('#form_input_email').val(),
    	'controle_unicite_email': 'OK'
    }, function(data){
    	if (data == "email_present"){
    		alert("email deja en base");
     
    		/* code */
    	} else if (data == "email_unique"){
    		alert("email non en base");
    	}
    }, "text");

    Voir : http://api.jquery.com/jQuery.ajax/ et http://api.jquery.com/jQuery.post/

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Par défaut
    Merci beaucoup,

    En effet on obtient la même chose avec la version simple... A réfléchir je ne vois pas dans quel cas l'utilisation d'une fonction de callback est indispensable puisque, si je comprends bien, le script ne s'arrête pas comme en synchrone.

    Car pourquoi appeler une fonction quand on a le résultat de la requête plutôt qu'exécuter simplement les instructions comme dans mon exemple simple

    Si vous pouviez éclairer ma lanterne à ce sujet...

    Merci

  10. #10
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    Après une transaction AJAX, le code à exécuter peut être complexe. Dans ce cas, pour simplifier la présentation et la maintenabilité du code, il est conseillé de le séparer de celui de la transaction AJAX en utilisant une fonction de rappel (callback).

    L'usage d'une fonction de rappel est possible avec la plupart des méthodes jQuery.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/10/2011, 22h39
  2. passage de paramètres ajax pour requete
    Par ouchemhou dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 19/06/2009, 16h53
  3. activer mod_proxy pour les requetes ajax
    Par xtaze dans le forum Apache
    Réponses: 1
    Dernier message: 17/05/2006, 17h45
  4. Réponses: 2
    Dernier message: 22/11/2005, 14h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo