【问题标题】:Ajax & PHP Contact Form displays a blank page when clicking "submit"单击“提交”时,Ajax 和 PHP 联系表单显示空白页面
【发布时间】:2014-09-14 10:26:33
【问题描述】:

我正在尝试在 HTML 模板/主题上使用此联系表单,但是当我单击“提交”按钮时,它会将我重定向到空白/白页(源代码为空;地址栏显示它是 mail.php 页面),无论我是否有效地填写了姓名、电子邮件、消息字段。如果我确实有效地完成了这三个字段,那么它会成功发送电子邮件,但它仍然会重定向到空白页面,如果我没有,它只会重定向到空白 mail.php 页面,而不会显示任何 php/validation 错误。

我在 localhost (xampp) 和我的实时服务器上都进行了测试,结果相同。

contact.html(jQuery - 页面标题内):

<script >
    $("#contactform").submit(function(e){
      e.preventDefault();
      var name = $("#name").val();
      var email = $("#email").val();
      var message = $("#message").val();
      var dataString = 'name=' + name + '&email=' + email + '&message=' + message;
      function isValidEmail(emailAddress) {
        var pattern = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i);
        return pattern.test(emailAddress);
      };

      if (isValidEmail(email) && (message.length > 10) && (name.length > 1)){
        $.ajax({
        type: "POST",
        url: "mail.php",
        data: dataString,
        success: function(){
          $('.success').fadeIn(1000);
        }
        });
      } else{
        $('.error').fadeIn(1000);
      }

      return false;
    });
</script>

contact.html(联系表格):

<form id="contactform" action="mail.php" method="post">
    <table>
        <tr>
            <td><input type="text" id="name" name="name" placeholder="Your Name" /></td>
        </tr>
        <tr>
            <td><input type="text" id="email" name="email" placeholder="Your Email Address" /></td>
        </tr>
        <tr>
            <td><textarea id="message" placeholder="Your Message" name="message" rows="10" cols="20"></textarea></td>
        </tr>
        <tr>
            <td>
                <input type="submit" value="Send" id="send" class="button" />
                <input type="reset" value="Reset" class="button" />
            </td>
        </tr>
    </table>
    <p class="success" style="display:none">Your message has been sent successfully.</p>
        <p class="error" style="display:none">E-mail must be valid and message must be longer than 100 characters.</p>
</form>

mail.php:

<?php
error_reporting( E_ALL );
// Email Submit
// Note: filter_var() requires PHP >= 5.2.0
if ( isset($_POST['email']) && isset($_POST['name']) && isset($_POST['message']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ) {

  // detect & prevent header injections
  $test = "/(content-type|bcc:|cc:|to:)/i";
  foreach ( $_POST as $key => $val ) {
    if ( preg_match( $test, $val ) ) {
      exit;
    }
  }

  //send email
  mail( "johndoe@gmail.com", "Contact Form: ".$_POST['name'], $_POST['message'], "From:" . $_POST['email'] );

}
?>

【问题讨论】:

    标签: php jquery html ajax


    【解决方案1】:

    只需删除表单操作并在同一页面上执行,因为它通过 ajax 提交

    <form id="contactform" method="post">
    <table>
        <tr>
            <td><input type="text" id="name" name="name" placeholder="Your Name" /></td>
        </tr>
        <tr>
            <td><input type="text" id="email" name="email" placeholder="Your Email Address" /></td>
        </tr>
        <tr>
            <td><textarea id="message" placeholder="Your Message" name="message" rows="10" cols="20"></textarea></td>
        </tr>
        <tr>
            <td>
                <input type="submit" value="Send" id="send" class="button" />
                <input type="reset" value="Reset" class="button" />
            </td>
        </tr>
    </table>
    <p class="success" style="display:none">Your message has been sent successfully.</p>
        <p class="error" style="display:none">E-mail must be valid and message must be longer than 100 characters.</p>
    

    接下来你应该添加这个

    <?php if ( isset($_POST['email']) && isset($_POST['name']) && isset($_POST['message']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ) {
    
    // detect & prevent header injections
     $test = "/(content-type|bcc:|cc:|to:)/i";
       foreach ( $_POST as $key => $val ) {
         if ( preg_match( $test, $val ) ) {
         exit;
        }
      }
    
     //send email
       mail( "johndoe@gmail.com", "Contact Form: ".$_POST['name'], $_POST['message'], "From:" . $_POST['email'] );
    
    }
    

    【讨论】:

    • 现在点击“提交”后页面会刷新,但即使我在姓名、电子邮件和消息字段中输入了有效的详细信息,也不会发送电子邮件。
    • 您是否也将$("#contactform").submit(function(e){...} 添加到页面中
    • 是的。它在 标签内。
    • ajax 部分只需删除url,因为我们在同一页面上发布数据
    • 我这样做了,结果和以前一样。我尝试将 jquery 部分放在正文中并且验证错误有效,当我在这三个字段中输入一些有效数据时,它会发送“您的消息已成功发送”但我没有收到任何电子邮件。跨度>
    【解决方案2】:

    您在表单中的操作不应该是 mail.php。因此,表单在处理 AJAX 请求之前提交。

    【讨论】:

      【解决方案3】:

      我知道我一定犯了一个愚蠢的错误... :)) 从联系表单中删除“mail.php”操作并在body 标签内移动 jQuery 部分后,我 不知何故 将收件人电子邮件地址更改为 johndoe@gmail.com 而不是我的真实电子邮件帐户。纠正后一切开始工作。感谢 Sudhanshu 和 Stefan。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多