【问题标题】:Submit a HTML form without redirection and showing a success message提交不带重定向的 HTML 表单并显示成功消息
【发布时间】:2020-06-12 06:30:35
【问题描述】:

我决定从 WordPress 网站切换到使用 HTML、CSS 和 JS 自制的网站,旨在提高性能。到目前为止,依靠教程,我已经设法处理了几乎所有问题,但是我无法让联系表格像在 WP 中那样工作。到目前为止,它会将我重定向到显示成功消息的另一个页面,这很难看。

基本上,我希望提交按钮做 3 件事: 1. 不要将我重定向到另一个页面。 2. 重置表格。 3. 显示成功消息。

在这里阅读了许多类似的问题,但由于我对 AJAX 完全不熟悉,最终决定发布这个问题。这是我的代码:

索引.html:

     <div>
        <form method="post" action="form.php" name="myForm">
          <input name="name" placeholder="Nombre" required>
          <input name="email" type="email" placeholder="Correo Electrónico" required>
          <textarea rows="10" name="message" placeholder="Mensaje" required></textarea>
          <input id="submit" name="submit" type="submit" value="Enviar Mensaje" class="boton-rojo">
        </form>
      </div>

在form.php中:

<?php

$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$formcontent="De: $name \n Mensaje: $message";
$recipient = "contacto@mydomainname.cl";
$subject = "Mensaje desde el sitio web";
$mailheader = "From: $email \r\n";
mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
echo "Tu consulta fue recibida";

?>

任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 您只需将两个脚本合并到一个页面 (index.php) 中,像$_SERVER['PHP_SELF'] 一样将表单操作“重定向”到它,并且最初只显示表单,或者只显示成功提交时留言。当然,如果你想避免页面刷新,你也可以使用 AJAX。
  • 旁注:您应该阅读标头注入,然后在$email var 上添加验证,因此垃圾邮件发送者无法使用您的脚本发送垃圾邮件。

标签: javascript php forms form-submit ajaxform


【解决方案1】:

在表单中输入 ID

<form id='myForm'>
....
</form>

使用 jQuery(为了简单的代码)

   ....
   <script
      src="https://code.jquery.com/jquery-3.4.1.min.js"
      integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
      crossorigin="anonymous"></script>
</body>

使用 $.ajax


$('#myForm').submit(function(e) {

   e.preventDefault(); // prevent from submitting form directly

   $.ajax({
     url: 'form.php',
     method: 'post',
     data: $("#myForm").serializeArray() // convert all form data to array (key:value)
   })
   .done(function(response){
     alert(response); // show the response
     $("#myForm").reset(); // reset the form
   })
   .fail(function(error){
     alert(error); // show the error.
   });

})

【讨论】:

  • 你能告诉我应该把 ajax 放在哪里吗?在 index.html 中,在表单之后?
  • 你有表单的页面
  • 刚在表格之后做了,但没有任何反应。 Atom 甚至没有对它进行颜色编码,所以我想我所做的一定有问题。
  • 好的,我知道了,它应该进入 javascript 文件。
  • 更新:加载到服务器,一切正常!但表格不会重置。可能是什么问题?
猜你喜欢
  • 2013-10-17
  • 2013-12-08
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
  • 2018-07-11
相关资源
最近更新 更多