我有一个简单的联系表格
<form role="form" id="contactForm" method="post" action="php/mailer.php">
<div class="form-group">
<input type="text" class="form-control form-effect" name="name" id="name" placeholder="Name" required>
</div>
<div class="form-group">
<input type="email" class="form-control form-effect" name="email" id="email" placeholder="Email" required>
</div>
<div class="form-group">
<textarea type="textarea" class="form-control form-effect" name="message" id="message" placeholder="Message"></textarea>
</div>
<button type="submit" class="btn btn-default btn-sub" id="sbtBtn">Submit</button>
</form>
<div id="form-messages"></div>
提交表单后,我的javascript文件会对其提交
var form = $('#contactForm');
var formMessages = $('#form-messages');
$(form).submit(function(event) {
event.preventDefault();
var formData = $(form).serialize();
$.ajax({
type: 'POST',
url: $(form).attr('action'),
data: formData,
dataType: "json"
}).done(function(response) {
$(formMessages).text(response);
$(form)[0].reset();
}).fail(function(data) {
if (data.responseText !== '') {
$(formMessages).text(data.responseText);
} else {
$(formMessages).text('Oops! An error occured and your message could not be sent.');
}
});
});
然后调用我的php文件mailer.php
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$to_email = "test@gmail.com";
$name = filter_var($_POST["name"], FILTER_SANITIZE_STRING);
$email = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL);
$message = filter_var($_POST["message"], FILTER_SANITIZE_STRING);
if(strlen($name)<2){ // If length is less than 2 it will output JSON error.
json_encode('Name is too short or empty!');
}
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ //email validation
json_encode('Please enter a valid email!');
}
$message_body = $message."\r\n\r\n-".$name."\r\nEmail : ".$email."\r\n (".$message.") " ;
$headers = 'From: '.$name.'' . "\r\n" .
'Reply-To: '.$email.'' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
$send_mail = mail($to_email, "Contact from website", $message_body, $headers);
if(!$send_mail) {
json_encode('Could not send mail! Please try again.');
}else{
json_encode("Thank you for your message, we will contact you shortly");
}
}
由于某种原因,我显示的输出为空,并且不发送任何电子邮件。我一直想弄清楚为什么但似乎找不到任何东西。我知道它进入PHP文件,但不确定它有什么问题。
我甚至不知道从哪里得到空输出?
答案 0 :(得分:1)
首先,您需要在所有json_encodes之前放置echo
,例如
echo json_encode('Name is too short or empty!');
然后至少你可以看到是否有任何验证消息在触发。
其次,您需要尝试使用mail()命令和硬编码参数的php文件来确认您的邮件设置正确。如果您正在使用localhost,则可能不是。
接下来,检查网络下的控制台(f12)并确认实际提交了您想要的数据。你应该看到你的一个json回应作为回应。
到目前为止,您应该更好地了解在哪里集中精力/问题
答案 1 :(得分:-1)
你忘了在每个json_encode()
之前添加echo