jQuery AJAX-Formular wird zweimal gesendet

Lesezeit: 4 Minuten

jQuery AJAX Formular wird zweimal gesendet
James Privet

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

$('#exportForm').submit(function() {
  $.ajax({
    type: "POST",
    url: $(this).attr('action'),
    data: $(this).serialize(),
    success: function(response) {
      $('#exportForm').unbind('submit');
      console.log(response);
    }
  });
  return false;
});

  • 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

jQuery AJAX Formular wird zweimal gesendet
Chris Sercombe

Sowie anrufen preventDefaultauch anrufen stopImmediatePropagation auf der Veranstaltung.

$('#exportForm').submit(function(e){
    e.preventDefault();
    e.stopImmediatePropagation();
    $.ajax({
        type: "POST",
        url: $(this).attr( 'action' ),
        data: $(this).serialize(),
        success: function( response ) {
            console.log( response );
        }
    });

    return false;
});

  • 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

jQuery AJAX Formular wird zweimal gesendet
DevlshOne

Es ist sehr wahrscheinlich, dass Sie eine verwenden button oder submit um das Ajax-Ereignis auszulösen. Versuche dies:

$('#exportForm').submit(function(e){
        e.preventDefault();
        $.ajax({
            type: "POST",
            url: $(this).attr( 'action' ),
            data: $(this).serialize(),
            success: function( response ) {
                console.log( response );
            }
        });

        return false;
    });

  • 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(); :

Beispielsweise :

$('#exportForm').submit(function(e){
    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:

    <div ng-controller="HandleAjaxController">
        <div ng-controller="HandleAjaxController">
            <button id="home" type="button" class="btn btn-success">Send data</button>

Das hat mir mal sehr viel Stress bereitet, weil ich in meiner ng-Route den Controller hier reingesetzt hatte:

    $routeProvider
    .when("https://stackoverflow.com/", {
        templateUrl : "src/js/partials/home.html",
        controller : "HandleAjaxController"
    })

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.

1643908867 324 jQuery AJAX Formular wird zweimal gesendet
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

1643908867 418 jQuery AJAX Formular wird zweimal gesendet
Snziv Gupta

Ich habe jquery.unobtrusive-ajax.min.js ref zweimal hinzugefügt, wie hier beantwortet https://stackoverflow.com/a/15041642/4412545

.

758000cookie-checkjQuery AJAX-Formular wird zweimal gesendet

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy