Ajax PHP联系表单不起作用

时间:2015-06-22 11:44:28

标签: php ajax forms email contact

我遇到了php联系表单的问题。它发送了空的电子邮件,修好之后,现在它不发送电子邮件,但重定向到一个空白页面说“已发送”(在send-email.php文件中编码..

它应该在不离开活动页面的情况下显示成功消息,使用AJAX。不知道出了什么问题。任何帮助赞赏。问候, 这是头部;

<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
    <style>
.error { display:none; }
.success { display:none; }
</style>

<script type="text/javascript">
    $(document).ready(function(){
        $('#send_message').submit(function(e){
            e.preventDefault();
            var error = false;
            var name = $('#name').val();
            var email = $('#email').val();
            var message = $('#message').val();
            if(name.length == 0){
                var error = true;
                $('#name_error').fadeIn(500);
            } else {
                $('#name_error').fadeOut(500);
            }
            if(email.length == 0 || email.indexOf('@') == '-1'){
                var error = true;
                $('#email_error').fadeIn(500);
            } else {
                $('#email_error').fadeOut(500);
            }
            if(message.length == 0){
                var error = true;
                $('#message_error').fadeIn(500);
            } else {
                $('#message_error').fadeOut(500);
            } if(error == false){
                $('#cf_submit_p').attr({'disabled' : 'true', 'value' : 'Gönderiliyor...' });
                $.post("send_email.php", $("#contact_form").serialize(),function(result){
                    if(result == 'sent'){
                        $('#cf_submit_p').remove();
                        $('#mail_success').fadeIn(500);
                    } else {
                        $('#mail_fail').fadeIn(500);
                        $('#cf_submit_p').removeAttr('disabled').attr('value', 'Gönder');
                    }
                });
            }
        });
    });
</script>

这是身体部分;

<div class="container-fluid">
                        <p id="returnmessage"></p>
                        <form action="send_email.php" id="contact_form" method="post">
                            <h2 style="font-size:14px;line-height:18px;font-weight:600;padding-bottom:0;">Bize Yazın</h2>
                            <ul class="contactform">
                                <li>
                                    <div id="name_error" class="error" style="color:#aa3939; font-size:8px; line-height:8px;"> <i class="fa fa-exclamation"></i> Lütfen adınızı giriniz.</div>
                                    <span class="contact-input-icon" style="text-align:left"><i class="fa fa-user"></i></span>
                                    <div class="input-field">
                                        <input type="text" style="border:1px solid rgba(220,220,220,0.5)" name="name" id="name" value="" class="required requiredField" placeholder="Ad Soyad"/>
                                    </div>
                                </li>
                                <li>
                                    <div id="email_error" class="error" style="color:#aa3939; font-size:8px; line-height:8px;"> <i class="fa fa-exclamation"></i> Lütfen eposta adresinizi giriniz.</div>
                                    <span class="contact-input-icon"><i class="fa fa-envelope"></i></span>
                                    <div class="input-field">
                                        <input type="email" style="border:1px solid rgba(220,220,220,0.5)" name="email" id="email" value="" class="required requiredField email" placeholder="Eposta"/>
                                    </div>
                                </li>
                                <li class="textarea">
                                    <div id="message_error" class="error" style="color:#aa3939; font-size:8px; line-height:8px;"> <i class="fa fa-exclamation"></i> Lütfen mesajınızı giriniz.</div>
                                    <span class="contact-input-icon"><i class="fa fa-pencil"></i></span>
                                    <div class="input-field">
                                        <textarea name="message" style="border:1px solid rgba(220,220,220,0.5)" id="message" rows="6" cols="20" class="required requiredField" placeholder="Mesajınız"></textarea>
                                    </div>
                                    <div id="mail_success" class="success" style="color:#00CC00"><i class="fa fa-check"></i> İlginiz için teşekkürler. En kısa sürede sizinle irtibata geçeceğiz.</div>
                                    <div id="mail_fail" class="error" style="color:#aa3939"><i class="fa fa-times"></i> Üzgünüz, mesajınız iletilemedi. Daha sonra lütfen tekrar deneyin.</div>
                                </li>
                                <li class="buttons">
                                    <div id="cf_submit_p">
                                    <input type="hidden" style="border:1px solid rgba(220,220,220,0.5)" name="submitted" id="submitted" value="true" />
                                    <button type="submit" style="border:1px solid #3f97cf" class="button" id="send_message"><i class="fa fa-paper-plane-o" style="font-size:20px;color:#3f97cf"></i></button>
                                    </div>
                                </li>
                            </ul>
                        </form>
                    </div> <!--end container-fluid-->

这是send_email.php;

<?php

    $autoResponse = true; //if set to true auto response email will be sent, if you don't want autoresponse set it to false
    $autoResponseSubject = "İletişim Formu"; 
    $autoResponseMessage = "<html>
    <head>
        <title>This is your HTML email!</title>
    </head>
    <body> 
        <div style='width:700px; font-family:Arial, Helvetica, sans-serif; font-size:44px; color:#CCC; text-align:center; margin:0 auto; padding:20px;'>THIS IS YOUR</div>/>
    </body>
    </html>";
    $autoResponseHeaders = "Kimden: yeterkara90@gmail.com";
    $autoResponseHeaders .= "MIME-Version: 1.0"."\r\n";
    $autoResponseHeaders .= "Content-type: text/html; charset=iso-8859-1"."\r\n";  

    //we need to get our variables first
    $to =   'yeterkara90@gmail.com'; //the address to which the email will be sent
    $name     =   $_POST['name'];
    $email    =   $_POST['email'];
    $subject  =   "Site İletişim Formu";
    $msg  =   $_POST['message'];

    $message = "Kimden: $name "."\r\n"."Eposta: $to "."\r\n";

    /*the $header variable is for the additional headers in the mail function,
     we are asigning 2 values, first one is FROM and the second one is REPLY-TO.
     That way when we want to reply the email gmail(or yahoo or hotmail...) will know
     who are we replying to. */
    $headers  = "From: $email\r\n";
    $headers .= "Reply-To: $email\r\n";


    if(mail($to, $subject, $message, $headers)){
        if($autoResponse === true){
            mail($email, $autoResponseSubject, $autoResponseMessage, $autoResponseHeaders);
        }
        echo 'sent'; // we are sending this text to the ajax request telling it that the mail is sent..
    }else{
        echo 'failed';// ... or this one to tell it that it wasn't sent
    }


?>

2 个答案:

答案 0 :(得分:3)

你应该在jQuery中为你的提交函数返回false,表示不提交。它不是重定向,而是提交给send_email.php。添加return false后的jquery代码。

<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
    <style>
.error { display:none; }
.success { display:none; }
</style>

<script type="text/javascript">
    $(document).ready(function(){
        $('#send_message').submit(function(e){
            e.preventDefault();
            var error = false;
            var name = $('#name').val();
            var email = $('#email').val();
            var message = $('#message').val();
            if(name.length == 0){
                var error = true;
                $('#name_error').fadeIn(500);
            } else {
                $('#name_error').fadeOut(500);
            }
            if(email.length == 0 || email.indexOf('@') == '-1'){
                var error = true;
                $('#email_error').fadeIn(500);
            } else {
                $('#email_error').fadeOut(500);
            }
            if(message.length == 0){
                var error = true;
                $('#message_error').fadeIn(500);
            } else {
                $('#message_error').fadeOut(500);
            } if(error == false){
                $('#cf_submit_p').attr({'disabled' : 'true', 'value' : 'Gönderiliyor...' });
                $.post("send_email.php", $("#contact_form").serialize(),function(result){
                    if(result == 'sent'){
                        $('#cf_submit_p').remove();
                        $('#mail_success').fadeIn(500);
                    } else {
                        $('#mail_fail').fadeIn(500);
                        $('#cf_submit_p').removeAttr('disabled').attr('value', 'Gönder');
                    }
                });
            }
            return false;
        });
    });
</script>

在您的PHP代码中,您应该在发送电子邮件之前检查数据是否已发布。像这样的东西

<?php

    $autoResponse = true; //if set to true auto response email will be sent, if you don't want autoresponse set it to false
    $autoResponseSubject = "İletişim Formu"; 
    $autoResponseMessage = "<html>
    <head>
        <title>This is your HTML email!</title>
    </head>
    <body> 
        <div style='width:700px; font-family:Arial, Helvetica, sans-serif; font-size:44px; color:#CCC; text-align:center; margin:0 auto; padding:20px;'>THIS IS YOUR</div>/>
    </body>
    </html>";
    $autoResponseHeaders = "Kimden: yeterkara90@gmail.com";
    $autoResponseHeaders .= "MIME-Version: 1.0"."\r\n";
    $autoResponseHeaders .= "Content-type: text/html; charset=iso-8859-1"."\r\n";  

    //we need to get our variables first
    $to =   'yeterkara90@gmail.com'; //the address to which the email will be sent
    $name     =   $_POST['name'];
    $email    =   $_POST['email'];
    $subject  =   "Site İletişim Formu";
    $msg  =   $_POST['message'];

    $message = "Kimden: $name "."\r\n"."Eposta: $to "."\r\n";

    /*the $header variable is for the additional headers in the mail function,
     we are asigning 2 values, first one is FROM and the second one is REPLY-TO.
     That way when we want to reply the email gmail(or yahoo or hotmail...) will know
     who are we replying to. */
    $headers  = "From: $email\r\n";
    $headers .= "Reply-To: $email\r\n";

    if( $_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['email']) ){
        if(mail($to, $subject, $message, $headers)){
            if($autoResponse === true){
                mail($email, $autoResponseSubject, $autoResponseMessage, $autoResponseHeaders);
            }
            echo 'sent'; // we are sending this text to the ajax request telling it that the mail is sent..
        }else{
            echo 'failed';// ... or this one to tell it that it wasn't sent
        }
    }


?>

答案 1 :(得分:1)

如果你的javascript没有触发,那可能是因为表单是使用表单字段中的回车键而不是按钮点击提交的。

您应该将事件处理程序附加到表单,而不是将事件处理程序附加到按钮(而错误的处理程序,submit而不是click ...),而不是将事件处理程序附加到表单:

$('#contact_form').on('submit', function(e){
   e.preventDefault();
   ...

另请注意,javascript将无法继续,因此您应确保没有错误。例如,您只需使用var声明一个变量,然后在不使用var的情况下指定值。

所以:

        if(name.length == 0){
            var error = true;

应该是:

        if(name.length == 0){
            error = true;