【问题标题】:Submit button and form not working when attempting to prevent page reload尝试阻止页面重新加载时,提交按钮和表单不起作用
【发布时间】:2017-04-04 05:28:02
【问题描述】:

我知道有很多关于如何在使用 AJAX 提交表单后防止页面重新加载的问题和答案,但我就是无法让我的工作。我尝试将按钮设置为type: button,这只是完全禁用了按钮。当我在表单上尝试onsubmit: return false 时,这不会导致单击按钮。使用 jQuery 来防止默认也没有奏效。我想要的是使用 PHP 从表单中检索数据而不重新加载页面来发送这封电子邮件。任何帮助将不胜感激。

表格

<?php include('php/interuni_process.php');?>                 
  <form class="form_pro" action="index.php" method="post" role="form">

    <input type="text" class="form" name="E-mail" placeholder="E-mail" value="<?= $email ?>">
    <div class="error"><?= $email_error ?></div>
    <button name="submit" type="submit" class="action_button"></button>
 </form>

PHP

    $email_error = "";
    $email = "";


if ($_SERVER["REQUEST_METHOD"] == "POST") {


  if (empty($_POST["E-mail"])) {
    $email_error = "E-mail is required";
  } else {
    $email = test_input($_POST["E-mail"]);

    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      $email_error = "Invalid email format"; 
    }
  }

  if ($email_error == '' ){
      unset($_POST['submit']);

      $to = " Whoever <$email>";
      $subject = 'Hello';
      $message = "Hello, $firstname!";

      if (mail($to, $subject, $message, $headers)){
       $email = '';
      }
  }

}

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}

我也试过

$( document ).ready(function() {
    $(".form_pro").submit(function(e) {
        e.preventDefault();

        $.ajax({
            type: "POST",
            url: "php/interuni_process.php",
            data: $(this).serialize(), 
            success: function(data) {

            },
            error: function() {

            }
        });
    });
});

【问题讨论】:

  • 你的 ajax 代码在哪里?
  • 我添加了,检查编辑

标签: javascript php jquery ajax forms


【解决方案1】:

我认为您必须更改逻辑流程才能这样做。 试试下面我在我的电脑上测试过的代码。

<script src="jquery-1.11.1.js"></script>
<form id="myData" class="form_pro" method="post" role="form">

    <input type="text" class="form" name="E-mail" placeholder="E-mail" value="">
    <div class="error"></div>
    <button name="submit" type="button" class="action_button" onclick="doSubmit();">OK</button>
 </form>

<script>
    function doSubmit(){
        $.ajax({
            url:'interuni_process.php',
            data:$("#myData").serialize(),
            type:'POST',
            success: function (data, textStatus, jqXHR) {
                if(data==="SUCCESS"){
                    $(".error").text("No error occurred");
                }else{
                    $(".error").text("Error occurred: "+ data);
                }
            }
        });
    };
</script>

“interuni_process.php”的示例代码是

<?php
    $eMail=$_POST["E-mail"];

    if($eMail===""){ //or whatever process condition you want to do
        echo "Email cannot be blank";
    }else{
        echo "SUCCESS";
    }
?>

根据需要修改业务逻辑

【讨论】:

  • 我认为至少会有某种形式的加载时间让我以为什么都没有发生!
  • @Mahesh 如果您的表单 action="some_other_url" 并且您希望将特定字段的 ajax 调用到不同的 url,会发生什么?
【解决方案2】:

首先,您从 HTML &lt;form&gt; 标记中删除操作

 <form class="form_pro" method="post" role="form">

更改后将 return false 添加到您的 jquery 函数,如下所示

$(document).on('submit','.form_pro',function(){
    $.ajax({
        url:'interuni_process.php',
        type:'POST'
    });
    return false;
});

【讨论】:

  • 不幸的是,这不起作用。这非常奇怪,当我按下提交按钮时,添加 ajax 代码后没有任何反应,如我的问题所示。
  • @LordGoderick 我改变我的代码检查它对你有什么帮助
  • 抱歉,还是不行。老实说,我不知道它有什么问题。按下按钮没有任何结果。
  • 其实没关系!它正在工作!它是如此隐秘,以至于我以为什么都没有发生哈哈,不得不亲自检查我的电子邮件。
猜你喜欢
  • 2021-04-16
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 2012-03-09
  • 2016-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多