【问题标题】:How to get "success" with jQuery AJAX email form如何使用 jQuery AJAX 电子邮件表单获得“成功”
【发布时间】:2012-07-29 02:35:44
【问题描述】:

我在网站上创建了一个简单的电子邮件表单 - 使用 jQuery 库通过 AJAX 处理它。

我知道该表单正在工作,因为我正在接收测试电子邮件,但我需要让用户知道他们的电子邮件已发送。目前,成功后不会发生任何事件。它应该用成功消息替换表单(在 div #contactform 中)。我在这里缺少什么?

注意:我在提交表单后查看了 Safari 中的活动,它显示了我的 process.php 脚本,但它显示“已取消”。为什么要这样做,这可能与它为什么没有显示成功消息有关吗?

这是我的脚本:

HTML

<div id="contactform">
    <form id="churchcontact" action="" method="POST">

        <ul>
            <li>
                <label for="name">Name</label>
                <span class="error error_name">Please enter your name</span>
                <input id="name" type="text" name="name" />
            </li>

            <li>
                <label for="email">Email</label>
                <span class="error error_email">Please enter your email address</span>
                <input id="email" type="text" name="email" />
            </li>

            <li>
                <label for="message">Message</label>
                <span class="error error_message">Please write a message</span>
                <textarea id="message" name="message"></textarea>
            </li>

            <li>
                <input class="formsubmit" type="submit" value="Send" />
            <li>
        </ul>

    </form>
    </div>

jQUERY

$(document).ready(function() {


    ////////////////////////////////////
    //// form submit                ////
    ////////////////////////////////////
    $('#churchcontact').submit(function() {


        ////////////////////////////////////
        //// validation                 ////
        ////////////////////////////////////
        $('.error').hide();

        //message
        var message = $('textarea#message').val();
        if(message == '') {
            $('.error_message').show();
            $('textarea#message').focus();
            var errors = 'true';
        }


        //email
        var email = $('input#email').val();
        var atpos = email.indexOf("@");
        var dotpos = email.lastIndexOf(".");
        if (atpos<1 || dotpos<atpos+2 || dotpos+2>=email.length || email == '') {
            $('.error_email').show();
            $('input#email').focus();
            var errors = 'true';
        }

        //name
        var name = $('input#name').val();
        if(name == '') {
            $('.error_name').show();
            $('input#name').focus();
            var errors = 'true';
        }




        if(errors) {
            return false;
        } else {


            ////////////////////////////////////
            //// process                    ////
            ////////////////////////////////////

            var dataString = 'name='+ name + '&email=' + email + '&message=' + message;
            //alert (dataString);return false;
            $.ajax({
                type: "POST",
                url: "sites/all/modules/custom/churchcontact/process.php",
                data: dataString,
                success: function() {
                    $('#contactform').html("success!");
                }
            });



        }

        return false;

    });



});

PHP (process.php)

$name = $_POST['name'];
$email = $_POST['email'];
$msg = $_POST['message'];


$recipient = '[my email]';
$subject = 'Website Test';

$message = '
Name: ' . $name
. ', Email: ' . $email
. ', Message: ' . $msg;


mail($recipient, $subject, $message, $headers);

【问题讨论】:

    标签: php jquery html ajax


    【解决方案1】:

    在 process.php 中添加 echomail():

    $res = mail($recipient, $subject, $message, $headers);
    echo $res;        //if $res returns 1 that means mail was sent
    

    ajaxsuccess:

    ...
    success: function(data) {
        if(data == 1){
            message = "success!";
        }
        else{
            message = "Error";
        }    
        $('#contactform').empty().html(message);
       }
    

    【讨论】:

    • 只有 Safari 活动窗口中的一个:“.../process.php 已取消”。但该脚本确实有效,因为我确实收到了电子邮件。
    • 没有。表单保留在页面上(在#contactform 中),并且字段值保留。顺便说一句,我试图在成功时提示一个 alert() ,它也什么也没做。
    • 感谢您的帮助!我尝试了您的最后一个建议,实际上,两者都有效!我记得你经常需要做的不仅仅是在地址栏中按回车键。要刷新 .js 文件,我还必须重新加载页面 (cmd+r)。一旦我这样做了,成功消息就与您最初的建议相符。
    猜你喜欢
    • 1970-01-01
    • 2012-05-23
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多