Bonsoir a tous!

Je suis entrain de faire un formulaire que sert a répondre aux messages privées, tout cela est fait en php et ajax.

Donc voici la partie de mon code JS:

$("form.profile_message").on('submit', function(e) {
  var forms = $(this).attr('id');
  var link = $(this).attr('action');
  e.preventDefault();

  $.ajax({
    url: link,
    type: 'post',
    dataType: 'json',
    data: forms.serialize(),
      success: function(data) {

          if(data.status=='success') {
           // on execute la requete....
          } 
      }
  });
});

Et mon code html:

      <form id="<?= $msg->id; ?>"  class="profile_message" action="<?= WWW; ?>lib/ajax/replymessage.php" method="post">
      <input type="hidden" name="message_id" value="<?= $msg->id; ?>">
      <input type="hidden" name="to_id" value="<?= $msg->sender_id; ?>">
      <textarea name="message" id="Message" rows="4" cols="60"></textarea>
      <button>Envoyer</button>

    </form>

ça marche pas avec ce code, j'utilise $(this).attr('id'), parceque j'ai plusieurs messages, (formulaires en html) donc je dois utilise $(this).attr('id') pour recuperer chaque formulaire et pas tous dans le même temps...

dans la console ça me montre: "app.js:309 Uncaught TypeError: forms.serialize is not a function(…)"

Désolé pour mon francais, je ne parle pas très bien votre language

6 réponses


Huggy
Réponse acceptée

Comme ta variable forms contient l'id,
pour obtenir le formulaire, il faut faire $('#'+ forms)
et pour le sérialiser $('#' + forms).serialize()

Bonsoir.
Il y a plusieurs problèmes dans ton code.
Pour commencer, comme tu dis tu as plusieurs fois ce formulaire dans la page, mais si tu mets la même valeur à plusieurs attributs id, ton code ne pourra pas fonctionner correctement, étant donné que la valeur de l'attribut id doit être unique sur une même page (je fais bien sur référence à la balise textarea).
Ensuite, si tu ne spécifies pas que la balise button est de type submit, j'ai du mal à comprendre comment ton formulaire peut être soumis en appuyant sur le bouton Envoyer.
Sinon, pour savoir pourquoi tu as l'erreur pour serialize(), avant le déclenchement de la fonction ajax, fais un console.log(forms.serialize()) pour voir ce qui est retourné.

TheRox
Auteur

@Lartak avant tout, merci pour avoir repondu a mon sujet, alors, c'est pas vrai que je done le même id a tous les formulaires, c'est mon code html est mis dans un foreach, donc l'id change chaque fois pour chaque formulaire.

Second: le formulaire se submit parfaitment grace a ....on('submit', function ....., le formulaire se submit car j'ai testé sans foreach, et sa a bien, donc le problem vient pas de ça.
Et finalement: je peux pas faire console.log(forms.serialize() vu qu'il ya un erreur a cette ligne "forms.serialize()".

TheRox
Auteur

Merci pour votre message @Blobby, mais ça fix pas mon problème, mais c'est pas grave, je vais changé le system pour que on répond au messages dans une autre page (message.php?id=1).

TheRox
Auteur

Merci Huggy!

et merci @Blobby