2016-11-27 8 views
0

送信成功メッセージが新しいページに表示されています。同じページで送信した後に成功メッセージを取得する方法 - 新しいページではない

送信ボタンと同じページに表示するにはどうすればよいですか?ボタンを提出するために

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:

問題になる可能性が2ヶ所あり
$(".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; 
       } 
      }) 

答えて

0

1.PHPコードが新しいページにリダイレクト(まあ、ページは同じですが、?success=1パラメータでリロードされます)

あなたはページを再読み込みしたくない場合は

はこれを試してみてください:

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

2.HTMLフォームは、イベントが新しいページにリダイレクト提出します。 submitイベントのデフォルトの動作を無効にすることができます。

$(".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

試してみると動作しません。それは同じで、新しいページにリダイレクトします。contact.php – YakaMan

+0

フォームのデフォルトの動作を無効にしていないことに気付かなかった。更新された回答を確認してください。 – krlv

関連する問題