2016-11-29 2 views
0

Ich habe ein Problem mit meinem jquery Skript, es gibt Fehler zurück, wenn ich versuche, den Datumswert aus meinem Formular zu senden, wenn ich es leer lasse, zeigt es mir keinen Fehler.Ajax senden Datum Daten

<div class="field-wrap"> 
    <input type="date" name="fecha_nacimiento" required autocomplete="off" maxlength="30" placeholder="Fecha de nacimiento">Fecha de nacimiento</input> 
</div> 
<script> 
$(function(){ 
    $('#entrarBt').click(function(){ 
     $.ajax({ 
      url: 'registro_dpb.php', 
      type: 'POST', // GET or POST    
      data: $("#miForm").serialize(), // will be in $_POST on PHP side 

      success: function(data) { // data is the response from your php script 
       // This function is called if your AJAX query was successful 
       alert("Response is: " + data); 
      }, 
      error: function() { 
       // This callback is called if your AJAX query has failed 
       alert("Error!"); 
      } 
     }); 
    }); 
}); 
</script> 
+0

'.serialize()' ist meist für http Vars. Wenn Sie $ _POST verwenden, würde ich vorschlagen, 'serializeArray()' zu verwenden. Wie sieht der Dump von Ihrem PHP-Skript auf $ _POST aus? – Daerik

+0

Ich zögere wegen der Erwähnung * "gibt einen Fehler zurück, wenn ich versuche zu senden" * ** UND ** direkt nach * «es zeigt mir keinen Fehler» * ... Normalerweise würde ich nur sagen * «ersetzen '.serialize (...)' von '.val()' für einen Test. ;) –

+0

habe ich schon ausprobiert, aber der fehler kommt wieder, ich habe das problem nicht mit der php-datei denke ich, denn auch wenn ich den wert benutze oder nicht, taucht das problem auf, ich werde meinen post trotzdem mit php updaten! –

Antwort

1

Ihr Problem war ziemlich subtil ... Es ist schwer zu finden.
Aber die Lösung ist wirklich einfach.

Sie verwenden eine <button> innerhalb einer <form>, die absolut korrekt ist.

Aber Sie müssen wissen, dass in HTML5, , wenn der Typ ein <button> nicht explizit als „Knopf“ definiert ist, wird der Standardtyp „Eintragen“.

Referenz here.

Das war das Problem ...
Da Sie eine Ajax-Anfrage senden verwenden, die eine Antwort ohne Neuladen der Seite erhalten erlauben, müssen Sie „verhindern“ dieses normale Verhalten eines <button>.

Die durch den Knopf gemacht einreichen wurde nicht auf Ihren PHP-Skript geschickt, aber auf dem HTML-Seite (es gab keine anderen action im <form> Tag definiert, so ist die Standardeinstellung „Selbst“.
So dass die Seite neu geladen. . .. Ihre ajax-Anforderung zum scheitern verurteilt

so gibt es zwei Möglichkeiten, dieses Problem zu beheben:

: definieren Sie die Taste type als "Knopf":

<button type="button" id="entrarBt" [+ other attributes]>Entrar</button> 

oder
: Verhindern Sie dieses Standardverhalten mit prevent.default() in Ihrem Klick-Handler.

$('#entrarBt').click(function(e){ 
    e.preventDefault(); 

    $.ajax({ 
     //... 

Ich denke, die zweite ein deutlicher für eine andere Programmierer, die Ihren Code überprüfen könnte, aber das erste ist auch ok.


Zum Wohle der anderen Leser SO:
Wir (mich und Javier) kontrolliert fast alle anderen Fehlermöglichkeiten in chat.
Ich fand schließlich die Ursache, als ich für einen Test den ganzen Ajaxblock auskommentierte und dann bemerkte, dass die Seite noch reichte.

Dies zu beheben löste das Problem vollständig.

Dies ist eine knifflige Sache, um absolut zu wissen!
Kurz gesagt, ein <button> innerhalb eines HTML5 <form> ist ein Senden standardmäßig!