【问题标题】:Ajax preventing form from being sent [duplicate]Ajax阻止发送表单[重复]
【发布时间】:2019-01-09 01:33:55
【问题描述】:

我的 Ajax 脚本阻止发送我的表单。 我希望我的 Ajax 脚本发送我的表单,而无需刷新我的页面。 如果我在没有 Ajax 脚本的情况下使用我的表单和 PHP,它将表单发送到我的电子邮件就好了。但是当我添加 AJAX 以防止它刷新时,Ajax 脚本运行,并返回它已被发送,而不是被发送,这是我的问题。

为什么我的 AJAX 脚本阻止发送表单?

HTML:

<form id="KontaktForm" action="e_Sender.php" method="post">
Fulde navn * <input type="text" class="form-control" id="FuldeNavm" type="text" name="fuldt_navn"><br>
Email * <input type="email" class="form-control" id="Email" name="email"><br>
Mobil * <input type="number" class="form-control" id="Mobil" name="mobil"><br>
Antal * <input class="form-control" id="Antal" type="number" name="antal"><br>
Besked *<br><textarea class="form-control" id="Besked" rows="5" name="message" cols="30"></textarea><br>
<input class="btn btn-info" id="Submit" type="submit" name="submit" value="Submit">
</form>

AJAX:

$(function () {
   $("#KontaktForm").on('submit', function (e) {
      e.preventDefault();
         $.ajax({
                 type: 'post',
                 url: 'e_Sender.php',
             data: $('form').serialize(),
             success: function () {
             alert('form was submitted');
         }
      });
   });
});

PHP:

<?php 
if(isset($_POST['submit'])){
    $to = "vejby3824@gmail.com"; // this is your Email address
    $from = $_POST['email']; // this is the sender's Email address
    $fuldt_navn = $_POST['fuldt_navn'];
    $mobil = $_POST['mobil'];
    $antal = $_POST['antal'];
    $subject = $fuldt_navn . " Efterspørger et tilbud!";
    $message = $fuldt_navn . "\n" . "Mobil Nummer: " . $mobil . "\n\n" . "Kommer med: " . $antal . "\n\n" . "De har skrevet følgende besked: " . "\n" . $_POST['message'];


    mail($to,$subject,$message);
    $url = 'Index.html';
    header('Location: ' . $url);
    exit;
    }
?>

这里是network返回的图片

【问题讨论】:

  • 您在 PHP 中检查的第一件事是什么?它出现在您的请求中吗?
  • miken32 这不是我的 php 脚本,而是我的 ajax 脚本。如果我完全删除我的 ajax 脚本,一切正常,当按下提交按钮时,我会收到电子邮件。我想要一个 ajax 脚本的原因是,当按下按钮时,我的页面不必刷新即可将表单发送到我的电子邮件。这是我尝试使用 ajax 的地方,我在使用 ajax 脚本时遇到的问题是它会提醒表单已发送,但我不会像以前那样在电子邮件中收到任何表单。

标签: php ajax


【解决方案1】:

使用.serialize() 方法发送表单数据时,永远不会设置$_POST['submit']。预计JQuery behavior:

注意:只有“successful controls”被序列化为字符串。由于表单不是使用按钮提交的,因此没有序列化提交按钮的值

查看您的网络数据 - 没有 submit 字段。

修复它的最简单方法是在 PHP 端更改 if 条件:

<?php 
if (isset($_POST['email'])) {
    // ...
}

【讨论】:

  • 非常感谢!我确实将提交更改为电子邮件,现在它工作得非常好,就像我想要的那样!再次感谢!
  • 只是一个问题理解正确。要使 .serialize() 工作,它必须从我的表单中的有效输入中获取数据。对吗?
  • 很高兴能为您提供帮助。是的,.serialize 将只发送有效输入:文本、文本区域、选中复选框/单选按钮。
  • 仅供参考,这样的 PHP 表单脚本很容易受到 CSRF 攻击。请看看如何使它更安全stackoverflow.com/questions/36947825/…
  • krlv 我已经尝试添加验证码,但验证码不起作用,我又没有收到我的电子邮件,你知道为什么吗? jsfiddle.net/z473mvbL
猜你喜欢
  • 2017-12-16
  • 2016-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-20
  • 1970-01-01
  • 2013-03-31
  • 2016-05-01
相关资源
最近更新 更多