JQuery AJAX表单流程无需刷新

时间:2014-02-07 15:44:23

标签: php jquery ajax form-submit

我是JQuery的新手并且根本没有使用过AJAX。我已经在网上搜索了几天没有完整答案。

我试图通过AJAX通过电子邮件发送表单,而JQuery隐藏表单并显示其他数据。 JQuery部分用作页面切换以显示正确的数据,但表单信息不会通过电子邮件发送。

的JQuery / AJAX

$(document).ready(function() {
        //When the form is submitted...
        $('form').on('submit',function(e) {
            //Send the serialized data to mailer.php.
            $.ajax({
                url:'mailer.php',
                data:$(this).serialize(),
                type:'POST',
                success:function(data){
                console.log(data);
                $("#success").show().fadeOut(5000); //=== Show Success Message==
                },
                error:function(data){
                $("#error").show().fadeOut(5000); //===Show Error Message====
                }
            });
            e.preventDefault(); //=== To Avoid Page Refresh and Fire the Event "Click"===
            //$.post("mailer.php");
            //Take our response, and replace whatever is in the "form2"
            //div with it.
            $('#form1').hide();
            $('#form2').show();
        });
    });

PHP提交文件mailer.php

<?php          
        //Grab Posted Data
        $fname   = strip_tags(htmlentities($_POST['fname']));
        $lname   = strip_tags(htmlentities($_POST['lname']));
        $name = $fname." ".$lname;
        $email   = strip_tags($_POST['email']);
        $phone   = strip_tags(htmlentities($_POST['phone']));
        $address = strip_tags(htmlentities($_POST['address']));
        $city    = strip_tags(htmlentities($_POST['city']));
        $state   = strip_tags(htmlentities($_POST['state']));
        $zip     = strip_tags(htmlentities($_POST['zip']));
        $country = strip_tags(htmlentities($_POST['country']));
        $message = strip_tags(htmlentities($_POST['goals']));

        // PREPARE THE BODY OF THE MESSAGE

        $message = '<html><body>';

        $message .= '<table rules="all" style="border-color: #666;" cellpadding="10">';
        $message .= "<tr style='background: #eee;'><td><strong>Name:</strong> </td><td>$name</td></tr>";
        $message .= "<tr><td><strong>Email:</strong> </td><td>$email</td></tr>";
        $message .= "<tr><td><strong>Phone:</strong> </td><td>$phone</td></tr>";
        $message .= "<tr><td><strong>Address:</strong> </td><td>$address</td></tr>";
        $message .= "<tr><td>&nbsp;</td><td>$city, $state $zip $country</td></tr>";
        $message .= "<tr><td><strong>Goals:</strong> </td><td>$message</td></tr>";

        $message .= "</table>";
        $message .= "</body></html>";


        //   CHANGE THE BELOW VARIABLES TO YOUR NEEDS

        $to = 'me@me.com';

        $subject = 'Website Change Reqest';

        $headers = "From: $email \r\n";
        $headers .= "Reply-To: $email \r\n";
        $headers .= "MIME-Version: 1.0\r\n";
        $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

if (mail($to, $subject, $message, $headers)) {
          echo 'Your message has been sent.';
        } else {
          echo 'There was a problem sending the email.';
        }

?>

3 个答案:

答案 0 :(得分:3)

PHP mail()使用sendmail系统,大多数问题在未正确设置时发生。有时网络主机会彻底禁用它。

有时,我通过使用外部库(例如PhpMailer)和使用真实邮件帐户的SMTP来解决此问题。

旁注 - 永远不要这样做:

    $fname   = strip_tags(htmlentities($_POST['fname']));
    $lname   = strip_tags(htmlentities($_POST['lname']));
    $name = $fname." ".$lname;
    $email   = strip_tags($_POST['email']);
    $phone   = strip_tags(htmlentities($_POST['phone']));
    $address = strip_tags(htmlentities($_POST['address']));
    $city    = strip_tags(htmlentities($_POST['city']));
    $state   = strip_tags(htmlentities($_POST['state']));
    $zip     = strip_tags(htmlentities($_POST['zip']));
    $country = strip_tags(htmlentities($_POST['country']));
    $message = strip_tags(htmlentities($_POST['goals']));

可以通过以下方式轻松替换:

     extract(
        array_map(
           function($elem) {
              return strip_tags(html_entities($elem));
           }, $_POST)
     );

答案 1 :(得分:1)

我已经遇到过这样的问题了。问题不在于javascript代码,而是在php的mail()函数中。

发生了如今大多数邮件服务器都不支持发送未经身份验证的电子邮件。请注意,为了使用mail()函数,您从未提供用户名或密码来登录邮件服务器。

我的问题是使用PHPMailer类(http://phpmailer.worxware.com提供)解决的,我提供了邮件服务器的地址,帐户用户名和密码。认为创建带附件的HTML电子邮件非常容易,无需担心编写长标题代码。

答案 2 :(得分:0)

您是否使用Denwer测试此示例?