J'ai un formulaire simple avec remote = true.
Ce formulaire est en fait sur une boîte de dialogue HTML, qui se ferme dès que le bouton Soumettre est cliqué.
Maintenant, je dois apporter des modifications sur la page HTML principale une fois le formulaire soumis avec succès.
J'ai essayé cela en utilisant jQuery. Mais cela ne garantit pas que les tâches sont effectuées après une forme de réponse de la soumission du formulaire.
$("#myform").submit(function(event) {
// do the task here ..
});
Comment attacher un rappel, de sorte que mon code ne soit exécuté qu'une fois le formulaire soumis avec succès? Existe-t-il un moyen d'ajouter un rappel .success ou .complete au formulaire?
Réponses:
Je viens de faire ça -
Et les choses ont parfaitement fonctionné.
Consultez cette documentation API pour plus de détails.
la source
<form>
est soumis habituellement? (Je veux dire pas avec Ajax) Que puis-je mettre dans le premier argument de.bind()
? EDIT: eh bien, je supposeclick
. Nvm, désolé. : pJe n'ai pas pu faire fonctionner de manière fiable la solution numéro un votée positivement, mais j'ai trouvé que cela fonctionne. Je ne sais pas si c'est nécessaire ou non, mais je n'ai pas d'attribut d'action ou de méthode sur la balise, ce qui garantit que le POST est géré par la fonction $ .ajax et vous donne l'option de rappel.
la source
$(this).serialize()
ligne. Il vous permetjQuery.ajax()
de soumettre le formulaire existant en arrière-plan, puis d'attraper la réponse du serveur et d'en faire quelque chose..serialize
n'inclut pas les entrées de fichier dans votre requête POSTée. Utilisez plutôt le HTML5 FormData (voir cette question ) à moins que vous ne preniez en charge d'anciens navigateurs comme IE <9$(this).serialize()
, ça a résolu mes problèmes!Vous devrez faire les choses manuellement avec un appel AJAX au serveur. Cela vous obligera également à remplacer le formulaire.
Mais ne vous inquiétez pas, c'est du gâteau. Voici un aperçu de la manière dont vous allez travailler avec votre formulaire:
preventDefault
méthode)Tout d'abord, vous devrez annuler l'action d'envoi de formulaire comme suit:
Et puis, saisissez la valeur des données. Supposons simplement que vous ayez une zone de texte.
Et puis lancez une demande. Supposons simplement que ce soit une requête POST.
Et cela devrait le faire.
Remarque 2: Pour analyser les données du formulaire, il est préférable d'utiliser un plugin . Cela vous facilitera la vie et vous fournira une belle sémantique qui imite une action de soumission de formulaire réelle.
Remarque 2: Vous n'êtes pas obligé d'utiliser des reports. C'est juste une préférence personnelle. Vous pouvez également faire ce qui suit, et cela devrait également fonctionner.
la source
Pour MVC, c'était une approche encore plus simple. Vous devez utiliser le formulaire Ajax et définir les AjaxOptions
voici le code de soumission, il se trouve dans la section document prêt et lie l'événement onclick du bouton à pour soumettre le formulaire
voici le callback référencé dans AjaxOptions
dans la méthode du contrôleur pour MVC, cela ressemble à ceci
la source
Je ne crois pas qu'il existe une fonction de rappel comme celle que vous décrivez.
Ce qui est normal ici, c'est de faire les modifications en utilisant un langage côté serveur, comme PHP.
En PHP, vous pouvez par exemple récupérer un champ caché de votre formulaire et faire quelques changements s'il est présent.
PHP:
Une façon de procéder dans Jquery est d'utiliser Ajax. Vous pouvez écouter pour soumettre, retourner false pour annuler son comportement par défaut et utiliser jQuery.post () à la place. jQuery.post a un rappel de succès.
http://api.jquery.com/jQuery.post/
la source
Les gestionnaires «à la soumission» du formulaire sont appelés avant que le formulaire ne soit soumis. Je ne sais pas s'il y a un gestionnaire à appeler après l'envoi du formulaire. Dans le sens traditionnel non Javascript, la soumission du formulaire rechargera la page.
la source
la source
ajaxForm()
-vous installé un composant tiers? Ce n'est pas une partie standard de jQuery.