php - Ajax 和 PHP 表单 : window still refreshing

标签 php jquery html ajax

感谢各位阅读这篇文章的人! 我的网站上有一个联系表单,我希望当用户提交它时窗口不会刷新,但尽管我使用 Ajax 和 POST 方法,它仍然刷新..

这是代码(html):

                <form class="form-horizontal">
              <div class="form-group">
                <div class="col-sm-12">
                  <input type="email" class="form-control" placeholder="Email" name="email" id="email" required>
                </div>
              </div>
                <div class="form-group">
                <div class="col-sm-12">
                  <input type="text" class="form-control" placeholder="Complete name" name="name" id="name" required>
                </div>
              </div>
                <div class="form-group">
                <div class="col-sm-12">
                  <input type="text" class="form-control" placeholder="Object" name="objet" id="object" required>
                </div>
              </div>
              <div class="form-group">
                <div class="col-sm-12">
                        <textarea rows="8" class="form-control" placeholder="Your message here ..." name="message" id="message" required></textarea>
                </div>
              </div>
              <div class="form-group">
                <div class="col-sm-12">
                  <button type="submit" class="btn btn-custom-am" id="sending_form">Envoyer mail</button>
                </div>
              </div>
            </form>

PHP 文件:

<?php
if($_POST){
  $email = $_POST['email'];
  $name = $_POST['name'];
  $object = $_POST['objet'];
  $message = $_POST['message'];

  $headers = "MIME-Version: 1.0\r\n";
  $headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";
  $headers .= "From: $name <$email>\r\nReply-to : $name <$email>\nX-Mailer:PHP";

  $subject="$objet";
  $destinataire="my_mail@mail.com";
  $body="$message";

  mail($destinataire,$subject,$body,$headers);
}
?>

和 Ajax 调用:

$('#sending_form').click(function(){
    var data = {
        email: $('#email').val(),
        name: $('#name').val(),
        objet: $('#object').val(),
        message: $('#message').val()
    };
    $.ajax({
        url: "get_mail.php",
        type: 'POST',
        data: data,
        sucess: function(msg) {
            alert('Email sent');
        }
    });
});

我希望能为您提供所有必要的信息!

最佳答案

您应该阻止 click 事件的默认行为,即提交表单:

$('#sending_form').click(function(e){
    e.preventDefault()
    var data = {
        email: $('#email').val(),
        name: $('#name').val(),
        objet: $('#object').val(),
        message: $('#message').val()
    };
    $.ajax({
        url: "get_mail.php",
        type: 'POST',
        data: data,
        success: function(msg) {
            alert('Email sent');
        }
    });
});

Node: the e variable that was added inside the function parameters.

如果您不这样做 - 浏览器将执行的默认操作是提交表单(这是您想要阻止的)。

关于php - Ajax 和 PHP 表单 : window still refreshing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42261866/

相关文章:

php - mysqlslap 和 mysqli_query 之间的不同时间

php - 切换表时出现 zend db 错误可捕获的 fatal error : Argument 1 passed to __construct() must be an array, 给定对象,调用

javascript - XMLHttpRequest() 在函数中返回响应

php - id 不通过 url

jquery - 如何使用 jQuery 生成 TinyURL

html - 基本 HTML 页面中的 Canvas 始终大小为 300x150。

javascript - 在 CSS 中重复图像的一部分

javascript - FullCalendar Scheduler 列标题格式

javascript - 了解具有事件元素的菜单背后的逻辑

html - 边缘浏览器 : Jerking movement at the end of transition only when skew and translate are used together