2016-09-02 1 views
0

Ich versuche, eine Post-Methode mit jquery zu machen. Ich benutze es in einer Form und mit bootstravalidator um es zu validieren. Nach erfolgreicher Validierung wird das Formular veröffentlicht und der PHP wird aktiv. Jetzt versuche ich nach erfolgreicher Post eine Umleitung auf eine andere Seite zu machen. Hier ist der Code:Jquery Post-Methode und Redirect nach Erfolg

$('#buy').click(function() { 
$.post('php/text.php', $('form#order').serialize(), function() {window.location.href = "index.html";}); 
}); 

ich mehrere Versuche versucht, aber kann nicht die window.location.href = "index.html"; richtig bekommen. Entweder wird die Form auch bei fehlerhafter Validierung umgeleitet, oder es passiert nichts überhaupt ....

Ich finde es seltsam, weil 'php/text.php', $('form#order').serialize()' nur in Aktion bekommt, wenn die Validierung korrekt ist ...

EDIT:

Ich verwende auch Bootstrapvalidator um das Formular zu validieren. Die Validierung funktioniert perfekt und die Post-Methode wird ausgeführt, wenn alles ok ist.

Bootstrapvalidator:

$(document).ready(function() { 
     var validator = $('#order').bootstrapValidator({ 
      fields: { 
       email : { 
        message : "write email adress", 
        validators : { 
         notEmpty : { 
          message : "Show Email adress" 
         }, 
         stringLength : { 
          min : 6, 
          max: 35, 
         } 
        } 
       }, 
      } 
     }); 
     }); 

EDIT2:

HTML:

<form id="order"> 
    <input type="text" name="name"/><br> 
    <input type="text" name="email"/><br> 
    <textarea name="comment"></textarea><br> 
    <button type="submit" name="send" id="buy">Send</button> 
</form> 
+0

Ist es so weit wie die Erfolgsfunktion zu bekommen? –

+0

Der Browser sendet das Formular noch, nachdem der Code ausgeführt wurde. Add return false; an den Handler, um das zu verhindern. – Bhavin

+0

@Bhavin nicht ganz Ihre Idee. Könnten Sie mir bitte im Code zeigen wo? – PLAYCUBE

Antwort

0

Sie Formular abgeschickt wird, wenn Sie auf die Schaltfläche #buy klicken, und auch wenn Ihr JavaScript-Code läuft, Die Seite wird aktualisiert. Wenn Sie die Übermittlung des Formulars deaktivieren möchten, können Sie $(form).on('submit', function() { return fase; }) verwenden.

Dies ist der aktualisierte Code:

$('#order').on('submit', function() { 
    $.post('php/text.php', 
      $('form#order').serialize(), 
      function() { 
       window.location.href = "index.html"; 
      } 
    ); 
    return false; 
}); 

aktualisiert

Da Sie den bootstrapvalidator verwenden, sollten Sie das Plugin für den Prozess als auch einreichen (das Plugin hat eine submitHandler Funktion, die Sie verwenden sollen)

Dies ist der aktualisierte Code des Prüfers:

$(document).ready(function() { 
    var validator = $('#order').bootstrapValidator({ 
     fields: { 
      email : { 
       message : "write email adress", 
       validators : { 
        notEmpty : { 
        message : "Show Email adress" 
        }, 
        stringLength : { 
         min : 6, 
         max: 35, 
        } 
       } 
      }, 
     }, 
     submitHandler: function(validator, form, submitButton) { 
      $.post('php/text.php', 
       form.serialize(), 
       function() { 
        window.location.href = "index.html"; 
       } 
      ); 
    }); 
}); 
+0

Ich werde immer noch mit fehlerhafter Validierung umgeleitet .... – PLAYCUBE

+0

Überprüfen Sie das Update – Dekel

+0

wissen Sie zufällig, wie Sie die Validierung, sobald die Seite mit dem Formular lädt, so dass es nicht notwendig sein wird, wenn Jemand drückt den Submit-Button? Meine Idee ist, den Absenden-Button zu aktivieren, sobald die Validierung in Ordnung ist. – PLAYCUBE

0

Ich glaube, du hast etwas falsch gemacht.

Ich bin mir nicht sicher, was Sie mit "bootstrapvalidator" meinen. Bootstrap selbst bietet keine Validierung, nur visuelle Anzeige von ansonsten validierten Formularelementen.

Der Code, den Sie geschrieben haben, führt keine "Validierung" durch.

Diese $('form#order').serialize() serialisiert Ihr Formular und enthält nur "erfolgreiche" Formularelemente (siehe https://api.jquery.com/serialize/ und https://www.w3.org/TR/html401/interact/forms.html#h-17.13.2 für die Definition von "erfolgreich"). Alle anderen Formularelemente werden weggelassen, was zu einem leeren String führt, wenn alle Formularelemente nicht "erfolgreich" sind.

Wie auch immer, dieser String wird (unbedingt) der $.post()-Methode zugeführt, so dass die POST-Anfrage immer ausgeführt wird. Wenn die POST-Anfrage erfolgreich ist (was einen Statuscode von 2xx oder 304 bedeutet), wird Ihr Erfolgshandler mit der Weiterleitung ausgeführt.

Also, Ihr Ziel zu erreichen, haben Sie irgendeine Art von Bestätigung Ihrer Form zu tun vor die POST-Anforderung senden. Sie können dies entweder manuell tun oder nur eines der jquery- oder bootstrap-Plugins verwenden, die für die Formularvalidierung erstellt wurden.

+0

Ich glaube, Sie haben etwas falsch. [bootstrapvalidator] (https://github.com/nghuuphuoc/bootstrapvalidator) ist eine Validierungsbibliothek, die auf der Bootstrap-Bibliothek basiert. – Dekel

+0

Entschuldigung, ich antwortete auf den ursprünglichen Beitrag ohne weitere Spezifikation von "bootstrapvalidator". Setzen Sie diesen Begriff in Google und Sie finden mehr als nur eine Implementierung/Plugin. Sie haben natürlich Recht, dass "#buy" ein Submit-Button ist, das Formular wird trotzdem eingereicht. Das war in der ersten Version der Frage nicht offensichtlich. –

+0

Wir müssen auch wissen, welchen Bootstrapvalidator Sie verwenden. Es ist nicht offensichtlich, was es tut (oder nicht). –

0

fand ich eine Lösung

 $(document).ready(function() { 
      var validator = $('#order').bootstrapValidator({ 
        fields: { 
         email : { 
          message : "write email adress", 
          validators : { 
           notEmpty : { 
            message : "Show Email adress" 
           }, 
           stringLength : { 
            min : 6, 
            max: 35, 
           } 
          } 
         }, 
        } 
       }).bootstrapValidator('validate'); 
       }); 

     $(#button).click(function() { 
      var validator = $('#order').bootstrapValidator({ 
        fields: { 
         email : { 
          message : "write email adress", 
          validators : { 
           notEmpty : { 
            message : "Show Email adress" 
           }, 
           stringLength : { 
            min : 6, 
            max: 35, 
           } 
          } 
         }, 
        } 
       }).bootstrapValidator('validate'); 
      var isValid = true; 
      if($('#order').find('div.has-error').length > 0){ 
      isValid = false; 
      }; 
      if (isValid == true){ 
       $.post('php/text.php', $('form#order').serialize()); 
       $(location).attr('href','success.html');; 
      }; 
      }); 
     });