2017-11-16 1 views
0

Ich versuche, Formulardaten über AJAX zu buchen.AJAX serialisierte Daten leer

Wenn ich die AJAX-Funktion entferne und eine Standardformular-POST-Methode ausführe, werden die Daten in DB-Fein eingefügt. Wenn ich console.log die serialisierten Daten des Formulars abschicke zeigt es sich an.

Wenn die AJAX-Funktion ausgelöst wird, verschwinden die Daten scheinbar. Die Funktion wird als Erfolg ausgelöst, es werden jedoch keine Daten eingefügt und die Variable formdata ist scheinbar leer. Kann jemand Licht darauf werfen?

Hier ist der Code so weit -

jQuery/AJAX -

$('#calendar-form').submit(function() { 
    var formdata = $(this).serialize(); 
    console.log(formdata); 
    $.ajax({ 
    url: "insert.php", 
    type: "POST", 
    data: formdata, 
    success: function() { 
     alert('success') 
    }, 
    error: function() { 
     alert('ERROR'); 
    } 
    }); 

    return false; 
}); 

HTML

<form id="calendar-form" action="" method="" accept-charset="utf-8"> 
    <input type="text" name="name" id="name"> 
    <input type="text" name="email" id="email"> 
    <input type="hidden" name="site" id="site" value="<? echo $_SERVER['HTTP_HOST'] ?>"> 
    <input class="submit" type="submit" name="submit" value="Submit"> 
</form> 

PHP

try { 
    $bd = new PDO("mysql:host=localhost;dbname=;charset=utf8", "", ""); 
     // $bd->setAttribute(PDO::ATT_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    } catch (PDOException $e) { 
     echo 'Theres been an error while attempting to connect to the database'; 
    } 

    if(isset($_POST['submit'])){ 
     $name = $_POST['name']; 
     $email = $_POST['email']; 
     $site = $_POST['site']; 

     $sql = "INSERT INTO `users`(`name`, `email`, `site`) VALUES ('$name', '$email', '$site')"; 

     try { 
      $query = $bd->prepare($sql); 
      $query->bindValue(':name', $name, PDO::PARAM_STR); 
      $query->bindValue(':email', $email, PDO::PARAM_STR); 
      $query->bindValue(':site', $site, PDO::PARAM_STR); 

      if($query->execute()){ 
       echo "Success"; 
      }else{ 
       echo "Failure"; 
      } 
     } catch (Exception $e) { 
      echo $e->getMessage(); 
     } 
    } 

Hinweis: Ich habe DB-Details für diesen Beitrag entfernt, aber sie sind in Code vorhanden.

Console

name = Benji & email = email% 40email.com & site = localhost% 3A8888 - scripts.min.js: 9: 117

Netzwerk

Console - Network

+1

Sie verwenden keine vorbereiteten Anweisungen richtig .. Verwenden Sie Platzhalter als Werte .. Werfen Sie keine Postdaten in – Akintunde007

+0

Können Sie einen Blick auf die Registerkarte Netzwerk Ihres Entwicklertools werfen, um diese Anfrage zu analysieren? –

+0

Was bedeutet ein print_r ($ _ POST); Rückkehr? – Akintunde007

Antwort

1

Dies ist, weil jQuery .serialize()does not include the submit button :

Kein Sendeschaltflächenwert wird serialisiert, da das Formular nicht über eine Schaltfläche übermittelt wurde.

Überprüfen Sie die Konsole für die Ausgabe Ihrer console.log(formdata) - Sie werden sehen, submit fehlt. Und da es fehlt, wird der Test, den Sie am hinteren Ende auf diesem Wert zu tun fehl:

if(isset($_POST['submit'])){ 

Genau wie lösen hängt davon ab, was Sie versuchen zu tun. Wenn Sie nur sicherstellen möchten, war die Anforderung eine POST (kein GET) könnten Sie:

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 

Wenn Sie die Standardüberprüfung tun möchten, können Sie explizit prüfen jedes der erwarteten Werte vorhanden sind:

+0

Danke! Dies hat das Problem gelöst. –

Verwandte Themen