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

Langage PHP Discussion :

Renvoyer un message à javascript [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    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 : 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
     
    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 !

  2. #2
    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
    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 !
    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

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Par défaut
    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)?

  4. #4
    Membre éclairé Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Par défaut
    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 ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Par défaut
    Merci, oui effectivement ça me semble un peu plus propre!
    Je vais faire évoluer mon code dans ce sens là !

    A plus !

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

Discussions similaires

  1. Renvoyer des messages en masse
    Par hannib dans le forum VBA Outlook
    Réponses: 4
    Dernier message: 01/12/2007, 00h41
  2. POSTFIX - Renvoyer les messages non délivrés
    Par francillo dans le forum Réseau
    Réponses: 1
    Dernier message: 09/11/2007, 10h05
  3. message javascript alert
    Par kroukse dans le forum ASP.NET
    Réponses: 6
    Dernier message: 31/10/2007, 11h43
  4. comment renvoyer des messages
    Par AlexFred dans le forum Outlook
    Réponses: 1
    Dernier message: 25/09/2007, 12h13
  5. Réponses: 15
    Dernier message: 28/02/2007, 11h18

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