2016-04-30 12 views
1

zurückholen Ich benutze jQuery mit Ajax, um ein Formular an ein PHP-Skript zu senden.Ajax, um Formular zu übermitteln, und Erfolg/Fehler

Der Benutzer wird ihre Details eingeben, klicken Sie auf eine Schaltfläche Absenden, das PHP-Skript wird ausgeführt und entweder die gewünschte Aktion ausgeführt oder fehlgeschlagen.

An dieser Stelle möchte ich eine Erfolgs- oder Fehlermeldung basierend auf der Art des Fehlers anzeigen.

<script> 
$("#contact-form").submit(function(event) { 
    event.preventDefault(); 
    $.ajax({ 
     url: "includes/contact-us.php", 
     type: "post", 
     data: $("#contact-form").serialize(), 
     success:function(data) { 
     alert(data); 
     }, 
     error:function(){ 
      alert("failure"); 
     } 
    }); 
}); 
</script> 

Also in meinem jQuery oben, wenn das Formular abgeschickt wird, verhindert es die Standard-action="path to script.php" führt dann die einreichen. Ich habe dies in den Fällen gemacht, in denen Benutzer Javascript deaktiviert haben, so dass zumindest die Basisfunktionalität da sein wird.

PHP

<?php     
    if(isset($_POST['contact']) && !empty($_POST['contact'])){ 

      $link = new mysqli("example", "example", "example", "example"); 

      if($link->connect_errno > 0) { 
       die('Unable to connect to database [' . $link->connect_error . ']'); 
      } 

      $name = $_POST['name']; 
      $email = $_POST['email']; 
      $website = $_POST['website']; 
      $subject = $_POST['subject']; 
      $message = $_POST['message']; 

      $stmt = $link->prepare("INSERT INTO contact (name, email, website, subject, message) VALUES (?, ?, ?, ?, ?)"); 
      $stmt->bind_param("sssss", $name, $email, $website, $subject, $message); 

      if($stmt->execute()){ 

       $rtn = "Success"; 

       echo json_encode($rtn); 

       } else { 

       $rtn = "Failed"; 

       echo json_encode($rtn); 

      }        
      $stmt->close(); 
      $link->close(); 
} 

jedoch in diesem Beispiel erscheint ein Warnfeld leer. Keine Fehler in Firebug oder Apache-Logs.

Ist es möglich: Wenn ich einen Submit mit Ajax durchführe, kann ich einen echo "Text from error or success box"; erhalten, den ich dann in einen Bootstrap-Alarm setzen kann?

Der Code, den ich schreibe, ist neu, also würde ich mich an neue Bibliotheken anpassen. Dies ist nur für die UI-Erweiterung, um Fehler oder Erfolgsmeldungen anzuzeigen, wenn der Benutzer JavaScript deaktiviert hat, dann würde die Standardaktion des Formulars nicht verhindert werden - sie würden einfach keine Erfolgs- oder Fehlermeldung sehen.

Etwas, was ich gesehen habe, ist "Javascript promises" Ich habe nichts dagegen, Javascript zu verwenden, wenn das in Bezug auf die Benutzerfreundlichkeit besser ist, da ich den Browser nicht einfrieren will, wenn ein Submit stattfindet.

Vielen Dank für Ihre Zeit

Antwort

1
können in PHP

Code sollte ich so etwas wie dieses

zurückblicken passieren würde Standardform des Erfolgs/Fehlers von PHP. So könnte Ausfall wie folgt aussehen:

json_encode(['success'=>false]); 

Dann auf diese in Javascript handeln würde wie folgt aussehen:

$.ajax({ 
    url: "includes/contact-us.php", 
    type: "post", 
    data: $("#contact-form").serialize(), 
    success:function(data) { 
     data = JSON.parse(data); 

     if (data.success) 
      alert('success!'); 
     else 
      alert('got failure response from PHP'); 
    }, 
    error:function(){ 
     alert("failure"); 
    } 
}); 
+0

Ich sehe, das ist, was ich suche.Das einzige Problem ist, auf der "Daten = JSON.parse (Daten);" Ich bekomme einen Fehler in Firebug, der liest "SyntaxError: JSON.parse: unerwartetes Ende der Daten in Zeile 1 Spalte 1 der JSON-Daten" – PublicDisplayName

+1

Dann muss es falsch von PHP kommen. Wenn Sie eine alte Version von PHP haben, müssen Sie stattdessen diese Terminologie verwenden: array ("Erfolg" => wahr); Wenn noch Probleme, console.log (Daten) vor und nach dem Parsen und poste es hier. –

+0

Am Ende funktionierte es, mit einem google recaptcha-Element etwas zu optimieren. Vielen Dank für Ihre Zeit! – PublicDisplayName

1

Sie versuchen, catch()

<?php 
    // ... 
    try{ 
     // your code 
     $msg = 'Success'; 
     return json_encode($msg); 
    }catch(Exception $e){ 
     $msg = 'Error'; 
     return json_encode($msg);   
    } 

?>

+0

in meinem PHP habe ich eine if() Anweisung zu sehen, ob der Einsatz stattfand, jedoch Selbst wenn es nicht erfolgreich war, weil in meinen Apache-Fehlerprotokollen ein Fehler aufgetreten war, war der Ajax-Callback immer noch erfolgreich. Wie löse ich das? – PublicDisplayName

+0

Ihr Ajax wird immer erfolgreich zurück, wenn er eine Anfrage an die PHP-Datei senden kann, also müssen Sie die Fehler in Ihrer PHP-Datei überprüfen und die Nachricht entsprechend dem Anfragezustand zurücksenden, können Sie den Code hier eingeben? –

+0

[Pastebin] (http://pastebin.com/X1gEcz1E) Für die Erfolgs-/Fehlermeldungen weiß ich, dass ich zu json_encode muss. Wie kann ich jedoch veranlassen, dass der Ajax-Aufruf den Erfolg oder Fehler eines Echos aus dem PHP-Skript ermittelt? – PublicDisplayName

Verwandte Themen