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 :

Impossible de recevoir une simple chaîne de caractère avec $.post


Sujet :

jQuery

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2012
    Messages : 69
    Points : 46
    Points
    46
    Par défaut Impossible de recevoir une simple chaîne de caractère avec $.post
    Bonjour,


    je n'arrive pas à recevoir en retour d'une fonction $.post une simple chaîne de caractère, mais par contre je la recupère correctement avec la fonction alert.


    voici le code client:
    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
    29
    30
    31
    32
    33
    34
    35
    <script>
    		$(document).ready(function(){
    		    $("#envoyer").click(function(){
    					$("#envoi").html("<b>Envoi du message...</b>");
    					var nom = $("#nom").val();
    					var prenom = $("#prenom").val();
    					var message = $("#texte").val();
    		        $.post("addMessage.php",
    			        {
    			          nom,
    								prenom,
    			          message
    			        }, function (data)
    								{
    									//alert (data);
    									$("#envoi").hmtl(data);
    								}
    		    		);
    				});
     
    				$("#recevoir").click(function(){
    					$("#recu").html("<b>Chargement des messages...</b>");
    		        $.post("getMessages.php",
    			        {
     
    			        }, function (data)
    								{
    									//alert (data);
    									$("#recu").html(data);
    								}
    		    		);
    				});
     
    		});
    </script>
    Code html : 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
    <form method="post" action="">
    	        	<p>Quelle est votre avis sur mes prestations</p>
    	        		<p>
    								<table>
    		            	<tr>
    											<td>Nom : <input type="text" name="nom" id="nom" /></td>
    											<td>Prénom : <input type="text" name="prenom"
    													id="prenom" /></td>
    									</tr>
    								</table>
    		            Message :<br />
    		            <textarea name="message" id="texte" rows="8" cols="35"></textarea><br />
    		            <button type="submit" value="Envoyer" id="envoyer">Envoyer</button>
    								<p id="envoi"></p>
    	        		</p>
    	    		</form>

    voici le code serveur:
    Code php : 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <?php
     
     
      try{
            $bdd = new PDO('mysql:host=localhost;dbname=database;charset=utf8',
              'user','pwd',array(PDO::ATTR_PERSISTENT => true));
          } catch ( Exception $e){
              die("Impossible de se connecter : " . $e->getMessage());
          }
     
      try{
            $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $bdd->beginTransaction();
     
            if ( isset($_POST['nom']) AND isset($_POST['prenom'])
                AND isset($_POST['message'])){
                $nom = htmlspecialchars($_POST['nom']);
                $prenom = htmlspecialchars($_POST['prenom']);
                $message = htmlspecialchars($_POST['message']);
                $message = nl2br($message);
              }
     
     
                $req_insert = $bdd->prepare('INSERT INTO messages( first_name, second_name,
                    message) VALUES ( :nom, :prenom, :message)');
     
                $req_insert->execute(array(
                  'nom' => $nom,
                  'prenom' => $prenom,
                  'message' => $message
                ));
     
                $bdd->commit();
     
          } catch ( Exception $e){
              $bdd->rollBack();
              die ("Impossible d'insérer le message" . $e->getMessage());
     
          }
     
          //$bdd->close();
     
          echo "<b>merci pour votre commentaire</b>";
     
     ?>


    merci pour votre aide.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    dans cette partie de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $.post('addMessage.php', {
        nom,
        prenom,
        message
    }
    tu n'as pas l'impression que tu oublies les valeurs de tes clés !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $.post('addMessage.php', {
        nom : valeur_nom,
        prenom: valeur_prenom,
        message: valeur_message
    }

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2012
    Messages : 69
    Points : 46
    Points
    46
    Par défaut
    merci pour ta réponse, non je n'ai pas oublié voici la fonction complète:

    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
    $("#envoyer").click(function(){
    					$("#envoi").html("<b>Envoi du message...</b>");
    					var nom = $("#nom").val();
    					var prenom = $("#prenom").val();
    					var message = $("#texte").val();
    		        $.post("addMessage.php",
    			        {
    			          nom,
    								prenom,
    			          message
    			        }, function (data)
    								{
    									//alert (data);
    									$("#envoi").prepend(data);
    								}
    		    		);
    				});

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    non je n'ai pas oublié voici la fonction complète:
    relis bien les codes que j'ai fournis, le 1st c'est le tien le 2nd la forme qu'il devrait avoir.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2012
    Messages : 69
    Points : 46
    Points
    46
    Par défaut
    je confirme que cette syntaxe fonctionne, je vois mes données dans la base de donnée.

    mon problème, c'est que le retour du code serveur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<b>merci pour votre commentaire</b>";
    ne s'affiche pas côté client dans mon page html, mais si j'utilise la console javascript alors j'obtiens la bonne réponse.

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2012
    Messages : 69
    Points : 46
    Points
    46
    Par défaut
    pour finir j'ai essayé en changeant le code:

    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
     
    var nom_value = $("#nom").val();
    					var prenom_value = $("#prenom").val();
    					var message_value = $("#texte").val();
    					$.post("addMessage.php",
    						{
    							nom : nom_value,
    							prenom : prenom_value,
    							message : message_value
    						}, function (data)
    							{
    								//alert (data);
    								$("#envoi").prepend(data);
    							}
    					);
    mais ça ne fonctionne toujours pas.

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2012
    Messages : 69
    Points : 46
    Points
    46
    Par défaut
    j'ai essayé de coller ce code dans l'ardoise 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
     
    $("#envoi").html("<b>Envoi du message...</b>");
    					var nom_value = $("#nom").val();
    					var prenom_value = $("#prenom").val();
    					var message_value = $("#texte").val();
    					$.post("addMessage.php",
    			        {
    			          nom : nom_value,
    								prenom : prenom_value,
    			          message : message_value
    			        }, function (data)
    								{
    									//alert (data);
    									$("#envoi").html(data);
    								}
    		    		);
    si je lance l’exécution le texte est affiché correctement. Mais si je presse le button depuis la page html, le texte n'est pas affiché.
    Je ne comprends pas pourquoi.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    je vois d'autres "problèmes" :

    1/ Il faut empêcher la soumission du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form method="post" action="" onsubmit="return false;">
    Et/ou avec event.preventDefault() :

    Code jQuery : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    		    $("#envoyer").on( 'click', function(event){ // mieux que $("#envoyer").click(function(){
    		      event.preventDefault();
    		      ...

    2/ dans addMessage.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                $nom = htmlspecialchars($_POST['nom']);
                $prenom = htmlspecialchars($_POST['prenom']);
                $message = htmlspecialchars($_POST['message']);
                $message = nl2br($message);
    NON.
    • PAS AVANT d'enregistrer en base de données.
    • On n'utilise ces fonctions (htmlspecialchars, nl2br) qu'AU MOMENT de l'AFFICHAGE.

    3/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            if ( isset($_POST['nom']) AND isset($_POST['prenom'])
                AND isset($_POST['message'])){
    ...
              }
    Le if est fermé avant l'enregistrement ?
    Ce n'est pas logique.
    Dernière modification par Invité ; 10/12/2016 à 09h47.

  9. #9
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bien d'accord avec jérôme concernant le event.preventDefault, pas noté compte tenu de l'indentation de ton code qui ne donne pas envie de tout lire, ce qui fait que les données sont mises en base suite à la soumission naturelle du formulaire et que ta fonction reviens dans le vide.

    je confirme que cette syntaxe fonctionne,
    Effectivement cela fonctionne avec l'écriture ES6.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var nom = 'Passe';
    var prenom = 'Jean';
    var obj = { nom, prenom}
    //>> Object { nom: "Passe", prenom: "Jean" }

  10. #10
    Candidat au Club
    Inscrit en
    Juin 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Il y a beaucoup de soucis dans ce code.

    Le premier, "on('click' ..." non, pourquoi utiliser ça, ce n'est pas lorsque tu cliques sur le bouton que tu veux avoir une action, c'est lorsque tu soumets ton formulaire.
    Si la personne n'utilise pas le bouton mais fais "entrer" sur un champ "input", le formulaire est sensé fonctionné.

    par conséquent, c'est "$('.monFormulaire').on('submit')" que tu dois utiliser.

    En second, pourquoi utiliser var = $('.monChamp').val(); ? Ce dernier t'obligera à modifier ton JS à chaque ajout de champ.

    Il existe une fonction "serialize()" qui permet de faire ça. Donc dans ton "on('submit')", "$(this).serialize()" te permet de récupérer les valeurs de ton champ à envoyer en ajax.

    En trois, comme mentionner au dessus, comme tu ne veux pas soumettre ton formulaire classiquement mais en ajax, tu dois bloquer la soumission normal (event.preventDefault).

    En quatre, le fichier php de destination ne devrait pas se trouver dans ton JS, mais dans l'argument "action", à toi de le récupérer ensuite ($(this).attr('action'))

    Bon courage

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2012
    Messages : 69
    Points : 46
    Points
    46
    Par défaut
    merci pour toutes ces réponses, je vais mettre tous cela au propre...

Discussions similaires

  1. [FAQ] Comment tester une chaîne de caractères avec une expression régulière ?
    Par Baptiste Wicht dans le forum Vos Contributions VBScript
    Réponses: 1
    Dernier message: 20/11/2007, 19h43
  2. Réponses: 2
    Dernier message: 16/07/2007, 13h46
  3. Réponses: 7
    Dernier message: 27/04/2007, 10h01
  4. Réponses: 9
    Dernier message: 21/02/2007, 13h20
  5. Extraction d'une chaîne de caractère avec SQL
    Par opeo dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 28/07/2006, 15h36

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