2017-01-25 5 views
1

Ich habe ein Formular, das einen Absenden-Button hat. Wenn ich diese Schaltfläche zum Senden klicken Sie dann JSON an einen Webdienst über AJAX geschrieben werden:Verhindern doppelte Vorschreibungen Formular

$("#msform").submit(function (e) { 

    $.ajax({ 
     url: 'https://example.com/webservice', 
     type: 'POST', 
     data: formData1, 
     crossDomain: true, 
     dataType: 'json', 
     jsonpCallback: 'callback', 
     success: function (data) { 
      console.log(data); 
     } 
    }); 

}); 

Die Webseite wird auch auf eine andere Seite laden und gehen .. Während der Benutzer das Laden mehrere Male auf dem Absenden klicken können Taste, wenn Das macht er dann mehrmals für die AJAX-Post zum Webservice.

habe ich versucht, diesen Code dieses Problem zu beheben, aber es funktioniert nicht:

// jQuery plugin to prevent double submission of forms 
jQuery.fn.preventDoubleSubmission = function() { 
    $(this).on('submit', function (e) { 
     var $form = $(this); 

     if ($form.data('submitted') === true) { 
      // Previously submitted - don't submit again 
      e.preventDefault(); 
     } else { 
      // Mark it so that the next submit can be ignored 
      $form.data('submitted', true); 
     } 
    }); 

    // Keep chainability 
    return this; 
}; 

$('#msform').preventDoubleSubmission(); 

Jede Idee, warum doppelte Buchung nicht verhindert wird ??

+0

Das Submit-Element deaktivieren? Dies verhindert, dass es erneut angeklickt wird und ist ein visueller Hinweis für den Benutzer, dass etwas passiert. –

Antwort

3

Die Lösung ist eine variable namens wasSubmitted zu verwenden, die überprüfen, ob ajax Anfrage bereits gesendet wurde.

var wasSubmitted = false; 
$("#msform").submit(function (e) { 
    if(!wasSubmitted) { 
     wasSubmitted = true; 
     $.ajax({ 
      url: 'https://example.com/webservice', 
      type: 'POST', 
      data: formData1, 
      crossDomain: true, 
      dataType: 'json', 
      jsonpCallback: 'callback', 
      success: function (data) { 
      console.log(data); 
      } 
     }); 
     return wasSubmitted; 
    } 
    return false; 
}); 
+0

Funktioniert nicht, wenn ich in den Chrom Inspect gehe und dann einen Breakpoint auf $ (this) .unbind ('click') setze; und dann klicken Sie mehrmals auf Senden, dann sendet es immer noch und geht noch immer durch den Code für die Einreichung mehrmals – YdB

+0

@bboni, Ja, tut mir leid. Ich habe meine Antwort bearbeitet. Sie müssen '.unbind' für das Button-Element verwenden. Ich habe '$ ('button')' 'benutzt, aber du kannst es mit deinem' selector' ersetzen. Angenommen, Sie haben einen Button mit id = 'btn', dann können Sie folgendes verwenden:' $ ('# btn'). Unbind ('click') '; –

+0

Es reicht immer noch mehrere Male :( – YdB

-1

Ich denke, ein einfaches prevent

$("#msform").submit(function (e) { 
    e.preventDefault(); 

    $.ajax(..) 
-1

Die Lösung wäre genug, dass zuerst mir in den Sinn kommt, ist die Schaltfläche Onclick mit JS zu deaktivieren.

document.getElementById("btn_id").setAttribute("disabled","disabled"); 
+0

Nicht sicher, warum der Downvote. Es würde für Ajax-Übermittlungen funktionieren, aber nicht regelmäßige Formularübermittlungen. – epascarello

Verwandte Themen