Ich habe ein Formular, das ich über jQuery erfasse und über AJAX sende. Mein Problem ist, dass das Formular jedes Mal, wenn ich die Seite aktualisiere, mehr als einmal gesendet wird.
Ich habe versucht, die Submit-Schaltfläche zu entbinden, aber dann wird das Formular nach dem ersten Absenden normal gepostet. Jede Hilfe wäre willkommen
Während Ihre Antwort die Frage lösen kann, ist es immer besser, wenn Sie beschreiben können, wie Ihre Antwort sie löst. Warum in diesem Fall preventDefault ist nicht genug. Dies ist ein Vorschlag zur weiteren Verbesserung dieser und zukünftiger Antworten.
– Luis Cruz
8. Oktober 14 um 16:54 Uhr
Hinzufügen von e.stopImmediatePropagation(); hat bei mir funktioniert, danke Chris! Darüber zerbreche ich mir heute Abend etwa 2 Stunden lang den Kopf. Während e.preventDefault() allein für mich in der Vergangenheit funktioniert hat, vermute ich, dass es für einfache Links oder Schaltflächen in Ordnung ist, aber wenn Sie in einem Übermittlungsereignis eines Formulars arbeiten, müssen Sie e.stopImmediatePropagation() verwenden, um das Ereignis zu verhindern davon, durch den Dom zu sprudeln. Sehen api.jquery.com/event.stopImmediatePropagation.
– Robinie
1. Juni 15 um 18:05 Uhr
Sie haben Recht, aber das funktioniert bei mir auch nicht, was der mögliche Grund sein könnte
– Veshraj Joshi
26. Januar 17 um 7:38 Uhr
falsch zurückgeben; reicht aus, um Standardverhalten und Ereignisblasen zu verhindern.
– Minca
11. Dezember 17 um 2:45 Uhr
DevlshOne
Es ist sehr wahrscheinlich, dass Sie eine verwenden button oder submit um das Ajax-Ereignis auszulösen. Versuche dies:
Danke, ich habe das ‘$(‘#exportForm’).unbind(‘submit’);’ entfernt und fügte das ‘e.preventDefault();’ und es scheint geklappt zu haben. Ich werde akzeptieren, wenn ich kann.
– James Privett
25. November 13 um 14:32 Uhr
Interessant – Sie sagen, dass die return false würde nicht funktionieren, um die Standardaktion zum Absenden des Formulars zu verhindern? jsfiddle.net/rR8Xz
– drahtig00
25. November 13 um 14:36 Uhr
Entschuldigung, nach mehr Tests wurde festgestellt, dass es nicht funktioniert.
– James Privett
25. November 13 um 14:50 Uhr
Was funktioniert nicht? Es reicht immer noch zweimal ein? Ihnen ist klar, dass diese AJAX-Routine nur eine ziemlich standardmäßige Übermittlung per POST ist, richtig? Wenn #exportForm ist eine Schaltfläche, ich schlage vor, Sie ändern die .submit zu .click.
– DevlshOne
25. November 13 um 14:54 Uhr
Das hat bei mir auch nicht funktioniert, ich musste e.stopImmediatePropagation() hinzufügen; wie Chris Sercombe unten vorschlägt.
– Robinie
1. Juni 15 um 18:03 Uhr
Falls Sie irgendeine Art von Validierung verwenden (z. B. jQuery-Validierung), wird das Formular zweimal gesendet, da abgesehen von $('#exportForm').submit Sie schreiben selbst, das Validierungs-Plugin sendet das Formular auch, nachdem es alle Felder erfolgreich validiert hat.
NB: Wenn Sie die jQuery-Validierung verwenden, vermeiden Sie die Verwendung von .submit(). Verwenden Sie stattdessen submitHandler.
Sie können einfach verwenden e.stopImmediatePropagation(); :
Wie Chris Sercombe betonte, funktioniert e.stopImmediatePropagation() und behebt das Problem definitiv, aber Sie sollten es nicht verwenden müssen. Das Problem besteht immer noch irgendwo in Ihrem Code. Lassen Sie mich ein Beispiel nennen, wie zwei Post-Anforderungen gesendet werden könnten:
Wenn Sie AngularJS verwenden und beispielsweise einen Controller namens “HandleAjaxController” erstellen, können Sie diesen ng-Controller einem div zuweisen und dann versehentlich denselben ng-Controller einem inneren div zuweisen. Dies würde dazu führen, dass die Post-Anforderung zweimal gesendet wird. So:
und dann setze ich es wieder in meiner home.html: <div ng-controller="HandleAjaxController">
Wie auch immer, das ist ein Beispiel dafür, wie zwei Posts gesendet werden könnten.
Wladimir Leonow
Sie sollten Ihren anderen js-Code überprüfen, vielleicht löst er irgendwo zweimal das “Submit” -Ereignis aus. Dies ist in meinem Fall passiert, ich habe “return false” im Onclick-Handler für eine Schaltfläche vergessen
Snziv Gupta
Ich habe jquery.unobtrusive-ajax.min.js ref zweimal hinzugefügt, wie hier beantwortet https://stackoverflow.com/a/15041642/4412545
.
7580000cookie-checkjQuery AJAX-Formular wird zweimal gesendetyes
Ich denke, Sie müssen mehr Code bereitstellen
– vborutenko
25. November 13 um 14:27 Uhr
Hey cosset, das ist so ziemlich alles, außer einer sehr einfachen Form. Was würden Sie sonst noch brauchen?
– James Privett
25. November 13 um 14:30 Uhr