1

我正在尝试创建一个从表单中收集姓名、电子邮件、消息类型和消息的联系表单。到目前为止,字段验证、获取信息和发送电子邮件都正常工作。我似乎无法解决的主要问题是,一旦提交了信息,就假设在发送电子邮件后会显示一条成功消息。这就是我的问题所在。

这是假设完成所有工作的功能。:

jQuery

// make our ajax request to the server
function submitForm(formData) {

    $.ajax({    
        type: 'POST',
        url: 'Scripts/send_email.php',
        dataType: 'json',       
        data: formData,
        cache: false,
        /*timeout: 8000, // timeout after 8 seconds*/
        success: function(data,textStatus,XMLHttpRequest) {
            $('form #error-div').removeClass('').addClass((data.error === true) ? 'xmark-img' : 'check-img');

                if ($('form #error-div').hasClass('check-img')) {
                    $('form #error-div').addClass('success').html(data.msg).fadeIn('fast'); 
                }

                $('form').slideUp().hide();
                $('form').find('span').hide();
                $('form').find('label').hide();
                $('form').find('input').hide();
                $('form').find('select').hide();
                $('form').find('textarea').hide();

                setTimeout($('form #error-div').fadeOut('slow'), 4000); 
                return true;        
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
                $('form #error-div').removeClass('').addClass('xmark-img').addClass('error-box').html('');
                $('form #error-div').html('There was an ' + errorThrown +
                                          ' error due to a ' + textStatus + 
                                          ' condition.'+ 'XMLHttpRequest: ' + XMLHttpRequest[0] + 
                                          ' Error Thrown: ' + errorThrown + '<br/>' + 
                                          ' textStatus:  ' + textStatus + ' <br />msg: ' 
                                          + msg + '<br />data: ' + data).fadeIn('fast')

            return false;
        },              
        complete: function(XMLHttpRequest, status) {
                $('form')[0].reset();           
        }
    }); 
};

现在提交表单后,error-div 显示发送消息动画 gif,我确实收到了电子邮件。但是,它不执行成功或错误回调。使用萤火虫我也得到一个错误“TypeError:数据为空”。我不确定我做错了什么,因为电子邮件确实已发送。


PHP 脚本

<?php 
sleep(3);

//Sanitize incoming data and store in variable
$name = trim(stripslashes(htmlspecialchars($_POST['name'])));
$email = trim(stripslashes(htmlspecialchars($_POST['email'])));
$message = trim(stripslashes(htmlspecialchars($_POST['message'])));
$message_type = trim(stripslashes(htmlspecialchars($_POST['message_type'])));   

$humancheck = $_POST['humancheck'];
$honeypot = $_POST['honeypot'];

if ($honeypot == 'http://' && empty($humancheck)) {         
        //Validate data and return success or error message
        $error_message = '';    
        $reg_exp = "/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+[\.]{1}[a-zA-Z]{2,4}$/";

        if (!preg_match($reg_exp, $email)) {
                $error_message .= "You must provide a valid e-mail address <br/>";             
        }

        if (empty($name)) {
                $error_message .= "You must include your name <br/>";
        }
        if (empty($message_type)) {
                $error_message .= "You must select a message type for your message. <br/>";
        }               
        if (empty($message)) {
                $error_message .= "You must enter a message. <br/>";
        }       
        if (!empty($error_message)) {
                $return['msg'] = 'Error: The request was successful but your form is not filled out correctly. '.$error_message;
                $return['error'] = true;
                exit();
        }else {
                    $ToEmail = "tony.hall@tonyhallportfolio.com";
                    $EmailSubject_Response = $message_type." from ".$name." (".$email.")"; 

                    $mailheader_Response = "From: ".$email."\r\n";
                    $mailheader_Response .= "To: ".$ToEmail."\r\n"; 
                    $mailheader_Response .= "Reply-To: ".$email."\r\n";
                    $mailheader_Response .= "Content-type: text/html; charset=iso-8859-1\r\n"; 

                    $MESSAGE_BODY_Response  = "<html><head><link rel='stylesheet' type='text/css' href='http://tonyhallportfolio.com/CSS/email_style.css' /></head><body>";
                    $MESSAGE_BODY_Response .= "<div class='header'><img src='http://tonyhallportfolio.com/images/logo-ns.png'/></div>\n";
                    $MESSAGE_BODY_Response .= "<hr/>\n";
                    $MESSAGE_BODY_Response .= "<div class='content'><h3>E-Mail Message via Tonyhallportfolio.com </h3>";
                    $MESSAGE_BODY_Response .= "<h4>Name: </h4>".$name."\n"; 
                    $MESSAGE_BODY_Response .= "<h4>Email: </h4>".$email."\n"; 
                    $MESSAGE_BODY_Response .= "<h4>Message Details: </h4>".nl2br($message)."</div>"; 
                    $MESSAGE_BODY_Response .= "<body/><html/>";

                    mail($ToEmail, $EmailSubject_Response, $MESSAGE_BODY_Response, $mailheader_Response) or die ("Failure");

                    if($message_type == "Website Inquiry"){
                        $EmailSubject_Inq = "Conformation of ".$message_type." sent via tonyhallportfolio.com"; 

                        $mailheader_Inq = "From: ".$ToEmail."\r\n";
                        $mailheader_Inq .= "To: ".$email."\r\n"; 
                        $mailheader_Inq .= "Reply-To: ".$ToEmail."\r\n";
                        $mailheader_Inq .= "Content-type: text/html; charset=iso-8859-1\r\n"; 

                        $MESSAGE_BODY_Inq  = "<html><head><link rel='stylesheet' type='text/css' href='http://tonyhallportfolio.com/CSS/email_style.css' /></head><body>";
                        $MESSAGE_BODY_Inq .= "<div class='header'><img src='http://tonyhallportfolio.com/images/logo-ns.png'/></div>\n";
                        $MESSAGE_BODY_Inq .= "<hr/>\n";
                        $MESSAGE_BODY_Inq .= "<div class='content'>"."<p>Thank you for reaching out to me in order to build a website for yourself or your business. This email confirms that your message has been sent. Please allow me ample time to respond back to you as I may have others inquiring for my services. I will make sure to review the information you sent me and respond in a reasonable amount of time. Thanks again for your inquiry.</p>";

                        $MESSAGE_BODY_Inq .= "<h3>".$message_type." for Tony Hall via Tonyhallportfolio.com </h3>";
                        $MESSAGE_BODY_Inq .= "<h4>Name: </h4>".$name."\n"; 
                        $MESSAGE_BODY_Inq .= "<h4>Email: </h4>".$email."\n"; 
                        $MESSAGE_BODY_Inq .= "<h4>Message Details: </h4>".nl2br($message)."</div>"; 
                        $MESSAGE_BODY_Inq .= "<body/><html/>";

                        mail($email, $EmailSubject_Inq, $MESSAGE_BODY_Inq, $mailheader_Inq) or die ("Failure");

                        $return['msg'] = '<h3>'.$name.' ,Thank you for your message. </h3>';    
                        $return['error'] = false;

                    }else{
                        $EmailSubject_msg = "Conformation of ".$message_type." sent via tonyhallportfolio.com"; 

                        $mailheader_msg   = "From: ".$ToEmail."\r\n";
                        $mailheader_msg  .= "To: ".$email."\r\n"; 
                        $mailheader_msg  .= "Reply-To:".$email."\r\n";
                        $mailheader_msg  .= "Content-type: text/html; charset=iso-8859-1\r\n"; 

                        $MESSAGE_BODY_msg  = "<html><head><link rel='stylesheet' type='text/css' href='http://tonyhallportfolio.com/CSS/email_style.css' /></head><body>";
                        $MESSAGE_BODY_msg .= "<div class='header'><img src='http://tonyhallportfolio.com/images/logo-ns.png'/></div>\n";
                        $MESSAGE_BODY_msg .= "<hr/>\n";
                        $MESSAGE_BODY_msg .= "<div class='content'>"."<p>Thank you for leaving me a message on my E-Portfolio website. This email confirms that your message has been sent. I will make sure to review your message and take your comments and/or suggestions in consideration to help improve the site. Your input is greatly appreciated.</p>";

                        $MESSAGE_BODY_msg .= "<h3>".$message_type." for Tony Hall via Tonyhallportfolio.com </h3>";
                        $MESSAGE_BODY_msg .= "<h4>Name: </h4>".$name."\n"; 
                        $MESSAGE_BODY_msg .= "<h4>Email: </h4>".$email."\n"; 
                        $MESSAGE_BODY_msg .= "<h4>Message Details: </h4>".nl2br($message)."</div>"; 
                        $MESSAGE_BODY_msg .= "<body/><html/>";

                        mail($email, $EmailSubject_msg, $MESSAGE_BODY_msg, $mailheader_msg) or die ("Failure");

                        $return['msg'] = $name.' ,Thank you for your message.'; 
                        $return['error'] = false;
                        exit(); 
                    }
             }          


}else {
    $return['msg'] = 'There was a problem with your submission. Please try again.';
    $return['error'] = true;
    exit(); 
}

?>
4

1 回答 1

0

您正在$return那里返回一个数组,您需要将其转换为 JSON 格式,然后再像这样回显它:

echo json_encode($return);
于 2012-10-06T16:40:32.060 回答