Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
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 12/01/2012, 14h12   #1
Membre du Club
 
Inscription : novembre 2007
Messages : 171
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 171
Points : 69
Points : 69
Par défaut Renvoyer un message à javascript

Bonjour,

Après des recherches sur le web, je n'ai pas trouvé de réponse à mon problème !
Je développe en php5, et voilà mon souci :
j'appelle la validation d'un formulaire grâce au code javascript :

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
 
function call(action, cmd, onCompleteFunction) {
	get_Xhr();
	xhr.onreadystatechange = function()  {
		alert(xhr.readyState);
		if(xhr.readyState == 4) {
			if (xhr.status == 200) {
				document.getElementById('resultat').innerHTML = xhr.responseText;
				if (onCompleteFunction != null) {
					onCompleteFunction();
				}
				return true;
			} else {
				document.getElementById('resultat').innerHTML = xhr.responseText;
				return false;
			}
		}
	}
	var formParameters = '';
	var formulaire = document.forms[0];
	for ( var i=0; i<formulaire.elements.length; i++ ) {
		var element = formulaire.elements[i];
		formParameters += "&" + element.id + "=" + encodeURIComponent(element.value);
	}
	xhr.open("POST", action, true);
	xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xhr.send('cmd=' + cmd + formParameters);
}
Dans le cas où certains champs du formulaire ne sont pas renseignés, je voudrais remonter un message d'erreur. ça c'est facile, un petit echo dans mon php et j'affiche soit un message de confirmation, ou d'erreur, que js me met ensuite au bon endroit!

mon souci, c'est de remonter un code autre que 200 (pour le xhr.status) dans le cas où mon formulaire n'est pas bon (pour savoir qu'il me faut pas vider mon formulaire par exemple!).
J'ai essayé d'utiliser la fonction header, mais sans succès ("header was already send" qu'il me dit!peut être parce que j'utilise session_start(); dans ce fichier php).
J'ai essayé de sortir de mon fichier php avec "exit (1);", "die (monMessage)", mais dans ces cas là, javascript reçoit toujours 200...

J'ai essayé de balancer une exception à partir de mon fichier php, mais dans ce cas là, un message du genre "Uncaugh exception" s'affiche, et c'est pas très joli! (dans ce cas là, j'ai pas regardé la valeur reçu par javascript)

Peut être que je fais complètement fausse route aussi quant à ma façon de gérer les formulaires!

La seule façon que je vois, c'est dans le cas d'une erreur, faire genre un echo "ERREUR".$monMessageErreur, et ensuite analyser dans javascript si le résultat renvoyé par php commence par "ERREUR", mais je trouve ça pas particulièrement propre...

Quelqu'un aurait il une idée de la façon de faire ça proprement?

Merci pour vos réponses !
legentil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 14h27   #2
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 808
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : juin 2008
Messages : 13 808
Points : 35 789
Points : 35 789
Citation:
mon souci, c'est de remonter un code autre que 200 (pour le xhr.status) dans le cas où mon formulaire n'est pas bon (pour savoir qu'il me faut pas vider mon formulaire par exemple!).
Pourquoi vouloir tricher sur le status ? Le fait de récupérer un message d'erreur devrait te suffire pour savoir que le formulaire n'est pas bon et le traiter de façon appropriée...
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, 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
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/01/2012, 14h58   #3
Membre du Club
 
Inscription : novembre 2007
Messages : 171
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 171
Points : 69
Points : 69
Merci pour ta réponse !
En fait mon intention n'est pas de tricher, mais au contraire de faire les choses proprement ! Après je pensais juste que c'était le code approprié !

Le souci c'est que je remonte un message dans tous les cas (enfin quand je dis remonte, c'est que je l'écris dans mon php avec echo), qui est soit une confirmation, soit une erreur.
Dans ce cas, selon toi, la bonne façon de faire est d'analyser le contenu du retour et de considérer que le traitement a marché ou pas en fonction de ça (en faisant par exemple, comme je disais dans mon précédent post, que tous mes messages d'erreurs commencent par la chaine erreur)?
legentil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 15h54   #4
Membre actif
 
Avatar de renaudjuif
 
Inscription : avril 2006
Messages : 300
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 300
Points : 174
Points : 174
la façon classique est de gérer les erreurs avec le contenu renvoyé par la page php.
Et de formater le echo de la page php avec des séparateurs.
Ainsi, tu peux traiter la réponse comme un tableau en faisant un split sur le responseText.

Si tu fais par exemple un echo "CodeStatut|MessageStatut|CorpsReponse"
et que dans ta fonction call tu fais : Response=http.responseText.split('|');
Tu peux traiter ta réponse en fonction du codeStatut.
Manipuler un tableau est + facile que de traiter une chaine...

ça te parait + propre ?
__________________
C'est curieux chez les marins ce besoin de faire des phrases !
renaudjuif est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/01/2012, 17h14   #5
Membre du Club
 
Inscription : novembre 2007
Messages : 171
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 171
Points : 69
Points : 69
Merci, oui effectivement ça me semble un peu plus propre!
Je vais faire évoluer mon code dans ce sens là !

A plus !
legentil 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 23h18.


 
 
 
 
Partenaires

Hébergement Web