我试图解决这个问题,或者发现类似的问题,但我仍然对这个问题感到头疼。
我有一个HTML表单,我正在使用jQuery函数进行验证,然后将其传递给PHP脚本进行邮件传递。我遇到的问题是一旦函数运行,就会发送重复的邮件,但第二个邮件是空白的,没有传递任何数据值。
jQuery:
$("#submit").click(function(){
var quit = false;
if(validateName()){
name = validateName();
$("label#name_error").fadeOut(0);
$("label#name_error2").fadeOut(0);
} else if (validateInput('name')){
$("label#name_error").fadeOut(0);
$("label#name_error2").fadeIn(250);
quit = true;
} else {
$("label#name_error").fadeIn(250);
$("label#name_error2").fadeOut(0);
quit = true;
}
// several more validation checks for the other fields follow.
if(quit){
return false;
}
var dataString = "name=" + name + "&email=" + email; //and other fields inserted here
$.ajax({
type: "POST",
url: "bin/MailHandler.php",
data: dataString,
success: function(){
$('.error').fadeOut(0);
$('#contact-form').clearForm();
$('#contact').html("<div class='download-box'><h2>Thanks for contacting us!</h2><p>Someone will be in touch shortly!</p></div>").fadeOut(0).fadeIn(1500);
}
});
return false;
});
然后发送到 PHP (MailHandler.php):
<?php
$to = "email@email.com";
$from = $_REQUEST["email"];
$subject = "Testing the form " . $_REQUEST["name"];
$headers = "From: " . $_REQUEST["email"] . "\r\n" . "Reply-To: " . $_REQUEST["email"];
$messageBody = "";
$messageBody .= $_REQUEST["name"] . "\n";
$messageBody .= $_REQUEST["email"] . "\n";
//and the other fields added similarly.
if (mail($to, $subject, $messageBody, $headers)){
echo ("Mail Sent");
} else {
echo ("Mail Failed");
}
?>
一旦运行,一切似乎都正确处理,我收到成功消息,并收到包含所有正确数据的电子邮件。
几分钟后,第二封电子邮件到达,但没有表格中的数据。所有标题和数据值都是空白的。
我查看了代码,但我无法弄清楚第二条消息的来源。有没有人看到我错过的东西?任何帮助表示赞赏。
谢谢!
答案 0 :(得分:1)
表单似乎已提交两次。一旦通过表单发布,那么一次通过AJAX调用。您可能希望坚持使用ajax调用而不使用表单标记,然后使用除submit
按钮之外的按钮来调用ajax调用。
答案 1 :(得分:0)
在MailHandler中,您应该在发送电子邮件之前检查您所需的变量是否为空。
如果vars为空(http://php.net/empty),则不应发送邮件。防病毒(例如趋势科技)可能会检查页面以确保其上没有任何病毒。
答案 2 :(得分:0)
$('#submit').click(function(event) {
event.preventDefault();
// rest of your code
});
$_REQUEST
,而是使用$_POST
。$_POST
变量是否为空。答案 3 :(得分:0)
如果您使用jquery .submit方法而不仅仅是点击事件,可能会有更多的运气,如下所示:http://api.jquery.com/submit/
所以对于你的代码:
//where #target is your form ID
$('#target').submit(function() {
//your code
return false;
});
$('#submit').click(function() {
$('#target').submit();
});
我认为这会让它发送一次电子邮件。
答案 4 :(得分:0)
原来这是服务器端发生的事情,而不是我的代码。我将代码移到了另一台服务器上,没有遇到任何问题。