122 Stimmen

Wie kann man verhindern, dass ein Formular von der Client-Seite aus mehrfach gesendet wird?

Wenn die Antwort langsam ist, kann es vorkommen, dass man mehrmals auf die Schaltfläche "Senden" klickt.

Wie kann man dies verhindern?

10voto

llimllib Punkte 3501

Erstellen Sie einen eindeutigen Bezeichner (z. B. die aktuelle Uhrzeit), und machen Sie ihn zu einer verborgenen Eingabe im Formular. Überprüfen Sie auf der Serverseite den eindeutigen Bezeichner jeder Formularübermittlung; wenn Sie diesen Hash bereits erhalten haben, handelt es sich um eine wiederholte Übermittlung. Die einzige Möglichkeit für den Benutzer, das Formular erneut einzureichen, besteht darin, die Formularseite neu zu laden.

edit: sich auf Javascript zu verlassen ist keine gute Idee, also könnt ihr alle weiter diese Ideen hochstimmen, aber einige Benutzer werden es nicht aktiviert haben. Die richtige Antwort ist, den Benutzereingaben auf der Serverseite nicht zu vertrauen.

10voto

Imran Khan Punkte 2293

Die einfachste Antwort auf diese Frage ist, dass sie gestellt wurde: "Wenn die Antwort langsam ist, kann es vorkommen, dass man mehrmals auf die Schaltfläche "Senden" klickt. Wie kann man das verhindern?"

Deaktivieren Sie einfach die Schaltfläche zum Absenden des Formulars, wie im folgenden Code.

<form ... onsubmit="buttonName.disabled=true; return true;">
  <input type="submit" name="buttonName" value="Submit">
</form>

Dadurch wird die Schaltfläche "Absenden" beim ersten Klick zum Absenden deaktiviert. Auch wenn Sie einige Validierungsregeln haben, dann wird es gut funktionieren. Ich hoffe, es hilft Ihnen.

8voto

Shoban Punkte 22785

Deaktivieren Sie die Schaltfläche "Senden" kurz nach einem Klick. Stellen Sie sicher, dass Sie Validierungen richtig handhaben. Behalten Sie auch eine Zwischenseite für alle Verarbeitungen oder DB-Operationen und leiten Sie dann zur nächsten Seite weiter. Dadurch wird sichergestellt, dass das Aktualisieren der zweiten Seite nicht zu einer weiteren Verarbeitung führt.

5voto

Tony Borf Punkte 4495

Sie können auch einen Fortschrittsbalken oder eine Drehscheibe einblenden, um anzuzeigen, dass das Formular bearbeitet wird.

5voto

Boris Guéry Punkte 46567

Mit JQuery können Sie das tun:

$('input:submit').click( function() { this.disabled = true } );

&

   $('input:submit').keypress( function(e) {
     if (e.which == 13) {
        this.disabled = true 
     } 
    }
   );

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X