jQuery AJAX formulaire soumet deux fois
J'ai un formulaire que je suis de la capture via jQuery et envoi via AJAX. Mon problème est que la forme présente plus d'une fois à chaque fois que j'actualise la page.
J'ai essayé de séparer le bouton soumettre, mais ensuite, le formulaire est affiché normalement après la première soumettre. Toute aide serait appréciée
$('#exportForm').submit(function() {
$.ajax({
type: "POST",
url: $(this).attr('action'),
data: $(this).serialize(),
success: function(response) {
$('#exportForm').unbind('submit');
console.log(response);
}
});
return false;
});
- Je pense que vous avez besoin de fournir plus de code
- Hey cosset, C'est à peu près tout ce qu'il ya d'autre qu'une forme très simple. Qu'est-ce que vous avez besoin?
Vous devez vous connecter pour publier un commentaire.
Il est plus probable que vous êtes à l'aide d'un
button
ousubmit
pour déclencher l'ajax événement. Essayez ceci:return false
ne serait pas de travail afin d'éviter le défaut de se soumettre à l'action? jsfiddle.net/rR8Xz#exportForm
est un bouton, je vous suggère de changer le.submit
à.click
.Ainsi que l'appel de preventDefault, aussi appel stopImmediatePropagation sur l'événement.
preventDefault
n'est pas assez. C'est une suggestion pour améliorer le présent et l'avenir de réponses.Dans le cas où vous utilisez une certaine forme de validation (e.g jQuery de Validation), le formulaire est envoyé deux fois car en dehors de
$('#exportForm').submit
vous écrivez vous-même, la validation plugin va également soumettre le formulaire après avoir valide tous les le terrain.NB : Si vous utilisez jQuery de Validation, évitez d'utiliser
.submit()
. Au lieu de cela, utilisersubmitHandler
.Vous pouvez simplement utiliser
e.stopImmediatePropagation();
:Par exemple :
Comme Chris Sercombe souligné, à l'e.stopImmediatePropagation() fonctionne et il arrête définitivement le problème, mais vous ne devriez pas avoir à l'utiliser. Le problème existe encore dans votre code quelque part. Permettez-moi de citer un exemple de la façon dont les deux postes les demandes peuvent être envoyées:
Si vous êtes en utilisant AngularJS, et permet de dire que vous faites un contrôleur appelé "HandleAjaxController" on pourrait attribuer ce ng-controller dans un div, et puis accidentellement attribuer ce même ng-controller à l'intérieure de la div. Ce serait la cause de la poste demande à être envoyé deux fois. Donc:
Cela a causé beaucoup de stress pour moi car dans mon ng-route j'ai dû mettre le contrôleur en ici:
et puis j'ai mis de nouveau dans mon home.html:
<div ng-controller='HandleAjaxController'>
De toute façon, c'est un bon exemple de la façon dont les deux postes pourraient être envoyés.
j'ai ajouté jquery.unobtrusive-ajax.min.js réf deux fois répondu ici https://stackoverflow.com/a/15041642/4412545
Vous devriez vérifier votre autre code js, peut-être que quelque part, il déclenche deux fois "soumettre" de l'événement.
Ce qui s'est passé dans mon cas, j'ai oublié "return false" dans le onclick gestionnaire pour un bouton
Pour quelqu'un qui ont presque le même problème, je peux dire que vous devez contrôler votre jQuery événements à l'écart de la fonction(){}, de sorte que le meilleur a seulement une demande de l'ajax POST est d'avoir des événements comme celui-ci:
pas en fonction de qui évoque deuxième fonction comme ceci:
Veux juste souligner, si vous avez plus d'un élément avec la même classe, ce qui peut arriver aussi bien.
Le problème peut être résolu en utilisant une div à la place d'un bouton sur votre formulaire php. Un bouton n'est pas nécessaire en raison de l'utilisation d'ajax.