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
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é.
@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()".
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).