Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/02/2011, 13h59   #1
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 122
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 122
Points : 28
Points : 28
Par défaut Validation formulaire ajax

Bonjour,

J'utilise ajax avec prototype et scriptaculous.
J'ai un formulaire à valider et je voudrais tester si la valeur saisie dans le champ de login existe bien dans la base de donnée.

Pour ce test-là, je fais
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
var ExistEmailFormFieldConstraint = Class.create(FormFieldConstraint, {
	validate: function(value){
		var retourAjax = false;
 
		var result = new Ajax.Request(
				this.options.url,{
					method: 'get',
					asynchronous:true,
					parameters: {email: value},
					onComplete: function(originalRequest){
		                reponse = originalRequest.responseText;
		                if(reponse == "")
		                	retourAjax = true;
					}
				}
			);
 
		return retourAjax;
	}
});
L'url retourne une réponse vide ou une valeur pour dire si le login existe déjà.

Le problème c'est que quand asynchonous est à true, retourAjax est toujours à true.
Quand je mets asynchrounous à false, retourAjax prend bien la bonne valeur mais à chaque fois que je saisi quelque chose des caractères sont avalés.

Que faire pour avoir à la fois la bonne valeur sans que les caractères soient avalés?

Voilà ce que je fais pour valider le formulaire:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
<script type="text/javascript">
<!--
 
var userCreateAccountForm = new FormValidator("formTab", true);
var fv1 = new Array();
 
fv1.push( new MandatoryFormFieldConstraint("login", { label: $("crea_mail"), errorMessage: '<noheto:str escapeJS="true"><noheto:message bundle="${frontBundle}" key="formulaire.error.email.empty" /></noheto:str>' } ));
fv1.push( new PatternFormFieldConstraint("login", { label: $("crea_mail"), errorMessage: '<noheto:str escapeJS="true"><noheto:message bundle="${frontBundle}" key="formulaire.error.email.syntax" /></noheto:str>', pattern: /^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/ } ));
 
fv1.push( new ExistEmailFormFieldConstraint("login", { label: $("crea_mail"), errorMessage: '<noheto:str escapeJS="true"><noheto:message bundle="${frontBundle}" key="formulaire.error.exist.account" /></noheto:str>' ,url :'<noheto:url value="/front/common/head/ajax/ajaxemailisvalid.jspz"/>'} ));
 
 
userCreateAccountForm.addFieldsConstraints(fv1); 
 
 
//-->
</script>
Merci d'avance pour votre aide

PS : ne pas faire attention aux tags noheto qui provient du cms utilisé mais qui n'influence pas sur le problème
zekabyle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 17h23   #2
Nouveau Membre du Club
 
Inscription : janvier 2006
Messages : 122
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 122
Points : 28
Points : 28
j'ai modifié mon code pour arriver avec ceci

Code :
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
 
var ExistEmailFormFieldConstraint = Class.create(FormFieldConstraint, {
	initialize : function($super, fieldName, options) {
		this.lastValid = true;
		$super(fieldName, options);
	},
	validate: function(value){
		var retourAjax = true;
		var result = new Ajax.Request(
				this.options.url,{
					method: 'post',
					parameters: {email: value},
					onComplete:this.checkUnicity.bindAsEventListener(this)
				}
			);
		return this.lastValid;
	},
	checkUnicity: function(response){
		var that = this;
		if (response.responseText == ""){
			that.lastValid = true;
		}
		else{
			that.lastValid = false;
		}
 
	}
 
});
Et maintenant, ça a l'air de mieux marcher.
zekabyle est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h10.


 
 
 
 
Partenaires

Hébergement Web