2016-11-27 4 views
0

Meine Submit-Erfolgsmeldung wird auf einer neuen Seite angezeigt.So erhalten Sie eine Erfolgsmeldung nach dem Senden auf derselben Seite - nicht auf der neuen Seite

Wie kann ich es auf der gleichen Seite wie die Absenden-Schaltfläche anzeigen lassen?

contact.php

<?php 
// configure 
$from = 'email'; 
$sendTo = 'email'; 
$subject = 'new message'; 
$fields = array('uname' => 'Jmeno', 'surname' => 'Spolecnost', 'phone' => 'Telefon', 'uemail' => 'Email', 'message' => 'Obsah zpravy'); // array variable name => Text to appear in email 
$okMessage = 'success'; 
$errorMessage = 'error'; 

// let's do the sending 
try 
{ 
    $emailText = "Mate novou zpravu z web formulare: example.cz\n=============================\n"; 
    foreach ($_POST as $key => $value) { 
     if (isset($fields[$key])) { 
      $emailText .= "$fields[$key]: $value\n"; 
     } 
    } 
    mail($sendTo, $subject, $emailText, "From: " . $from); 

    $responseArray = array('type' => 'success', 'message' => $okMessage); 
} 
catch (\Exception $e) 
{ 
    $responseArray = array('type' => 'danger', 'message' => $errorMessage); 
} 

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
    $encoded = json_encode($responseArray); 

    header('location: contact.php?success=1'); 

    echo $encoded; 
} 
else { 
    echo $responseArray['message']; 
} 
?> 

JS für Submit-Button:

$(".open4").click(function() { 
     $('#basicform').validator(); 
      $('#basicform').on('submit', function (e) { 
       if (!e.isDefaultPrevented()) { 
        var url = "contact.php"; 
        $.ajax({ 
         type: "POST", 
         url: url, 
         data: $(this).serialize(), 
         success: function (data) 
         { 
          var messageAlert = 'alert-' + data.type; 
          var messageText = data.message; 

          var alertBox = '<div class="alert ' + messageAlert + ' alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>' + messageText + '</div>'; 
          if (messageAlert && messageText) { 
           $('#basicform').find('.messages').html(alertBox); 
           $('#basicform')[0].reset(); 
          } 
         } 
        }); 
        return false; 
       } 
      }) 

Antwort

0

Es 2 Plätze, wo ein Problem sein kann:

1.php Code leitet Sie auf eine neue Seite (Nun, Seite ist die gleiche, aber es wird mit ?success=1 Parameter neu geladen):

die Sie interessieren, wenn Sie nicht Seite wollen neu geladen werden:

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
    echo json_encode($responseArray); 
} else { 
    echo $responseArray['message']; 
} 

2.html Formular Ereignis leitet Sie auf neue Seite. Sie können versuchen, das Standardverhalten des Formulars für submit zu deaktivieren. Ereignis:

$(".open4").click(function() { 
    $('#basicform').validator(); 
    $('#basicform').on('submit', function (e) { 

     //prevent Default functionality 
     e.preventDefault(); 

     var url = "contact.php"; 
     $.ajax({ 
      type: "POST", 
      url: url, 
      data: $(this).serialize(), 
      success: function (data) 
      { 
       var messageAlert = 'alert-' + data.type; 
       var messageText = data.message; 

       var alertBox = '<div class="alert ' + messageAlert + ' alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>' + messageText + '</div>'; 
       if (messageAlert && messageText) { 
        $('#basicform').find('.messages').html(alertBox); 
        $('#basicform')[0].reset(); 
       } 
      } 
     }); 
     return false; 
    }); 
}); 
+0

getestet und funktioniert nicht. Es ist gleich und umleiten auf die neue Seite contact.php – YakaMan

+0

Ich habe nicht bemerkt, dass Sie Standardverhalten des Formulars nicht deaktivieren. Überprüfen Sie meine aktualisierte Antwort. – krlv

Verwandte Themen