首页 > 解决方案 > 单击html按钮后无法回显任何内容

问题描述

我正在制作一个网站,需要一个联系页面,当人们按下发送时会向我发送电子邮件。我有三个文件,一个contactus.html,其中包括表单和一个发送按钮,一个contact.js,它使用jquery验证contactus.html中的所有框都已填写,以及一个contact_process.php文件发送单击发送按钮后给我的电子邮件。到目前为止,代码大部分都可以正常工作,并且每次都会向我发送一封电子邮件,以及如果有人尝试在未填写所有表格的情况下发送它,他们将无法发送,但我想在邮件发送后回显一些内容sent 告诉用户他们的消息已收到。

我使用了这段代码,它发送了电子邮件,但之后没有回显任何内容(您可能会注意到,从技术上讲,此表单允许某人根本不输入任何内容并仍然按发送,但是,我的 contact.js 验证联系表单是否是空的)。

<?php
// Send email
if (isset($_POST['message']) and isset($_POST['name']) and isset($_POST['email']) and 
isset($_POST['number']) and isset($_POST['subject'])) {

$message = $_POST['message'];
$name = $_POST['name'];
$email = $_POST['email'];
$number = $_POST['number'];
$subject_of_sender = $_POST['subject'];
$to = "email@domain.com";
$subject = "New Email"; // Email Subject
$body = "You have recieved a message from: $name\n Subject: $subject_of_sender \n Email: $email \n Phone Number: $number \n Message: \n $message";

$headers = "From: email@domain.com";

$send = mail($to, $subject, $body, $headers);   

if ($send) {
     echo 'thanks';    // This is where it won't echo anything
} else {
     echo 'error';
}
}

?>

有什么办法可以在单击“发送”按钮后向用户回显一条消息?这是我的contactus.html(这只是仅包含表单的代码片段)

<div class="col-lg-8">
                    <form class="form-contact contact_form" action="contact_process.php" method="post" id="contactForm" novalidate="novalidate">
                        <div class="row">
                            <div class="col-sm-6">
                                <div class="form-group">
                                    <input class="form-control valid" name="name" id="name" type="text" onfocus="this.placeholder = ''" onblur="this.placeholder = 'Enter your name (Required)'" placeholder="Enter your name (Required)">
                                </div>
                            </div>
                            <div class="col-sm-6">
                                <div class="form-group">
                                    <input class="form-control valid" name="email" id="email" type="email" onfocus="this.placeholder = ''" onblur="this.placeholder = 'Enter email address (Required)'" placeholder="Email (Required)">
                                </div>
                            </div>
                            <div class="col-sm-6">
                                <div class="form-group">
                                    <input class="form-control valid" name="number" id="number" type="text" onfocus="this.placeholder = ''" onblur="this.placeholder = 'Enter your phone number (Required)'" placeholder="Enter your phone number (Required)">
                                </div>
                            </div>
                            <div class="col-12">
                                <div class="form-group">
                                    <input class="form-control" name="subject" id="subject" type="text" onfocus="this.placeholder = ''" onblur="this.placeholder = 'Enter Subject (Required)'" placeholder="Enter Subject (Required)">
                                </div>
                            </div>
                             <div class="col-12">
                                <div class="form-group">
                                    <textarea class="form-control w-100" name="message" id="message" cols="30" rows="9" onfocus="this.placeholder = ''" onblur="this.placeholder = 'Enter Message (Required)'" placeholder=" Enter Message (Required)"></textarea>
                                </div>
                            </div>
                        </div>
                        <div class="form-group mt-3">
                            <button type="submit" class="button button-contactForm boxed-btn">Send</button>

                        </div> 
                      </form>
                     </div>

和我的contact.js

$(document).ready(function(){

(function($) {
    "use strict";


jQuery.validator.addMethod('answercheck', function (value, element) {
    return this.optional(element) || /^\bcat\b$/.test(value)
}, "type the correct answer -_-");

// validate contactForm form
$(function() {
    $('#contactForm').validate({
        rules: {
            name: {
                required: true,
            },
            subject: {
                required: true,
            },
            number: {
                required: true,
            },
            email: {
                required: true,
                email: true
            },
            message: {
                required: true,
            }
        },
        messages: {
            name: {
                required: "You must enter a name.",
            },
            subject: {
                required: "You must enter a subject.",
            },
            number: {
                required: "You must enter a phone number.",
            },
            email: {
                required: "You must enter a email."
            },
            message: {
                required: "You must enter a message.",
            }
        },
        submitHandler: function(form) {
            $(form).ajaxSubmit({
                type:"POST",
                data: $(form).serialize(),
                url:"contact_process.php",
                success: function() {
                    $('#contactForm :input').attr('disabled', 'disabled');
                    $('#contactForm').fadeTo( "slow", 1, function() {
                        $(this).find(':input').attr('disabled', 'disabled');
                        $(this).find('label').css('cursor','default');
                        $('#success').fadeIn()
                        $('.modal').modal('hide');
                        $('#success').modal('show');
                    })
                },
                error: function() {
                    $('#contactForm').fadeTo( "slow", 1, function() {
                        $('#error').fadeIn()
                        $('.modal').modal('hide');
                        $('#error').modal('show');
                    })
                }
            })
        }
    })
})     
})(jQuery)
})

标签: javascriptphphtmljquerycontact-form

解决方案


我会像这样返回json:

if ($send) {
      $success = 1;
      $message = 'Some success message';
} else {
      $success = 0;
      $message = 'Some error message';
}
$data = [
   'success' => $success,
   'message' => $message ,
];
echo json_encode($data);

然后将我的成功处理程序更改为:

  success: function(response) {
    if (response.success) {
        $('#success').fadeIn()
        // show response.message in the html somewhere
    } else {
        $('#error').fadeIn()
        // show response.message in the html somewhere     
    }
    // ... other stuff...
  },

要点是,当您从 php 脚本中回显数据时,ajax 调用 js 需要检查响应并对其进行处理。我选择回显 json 而不仅仅是一个字符串消息,因为我认为它更干净,尽管你也可以这样做。

有关此方法的更多信息,请参阅本文


推荐阅读