我遇到一个问题,我的AJAX表单帖子会创建一个警告,似乎回显整个页面,而不仅仅是成功消息,我无法弄清楚我做错了什么。 此外,我已经在堆栈上遵循了许多通过序列化传递数据的技巧,但是我已经习惯了诸如data { action: add, type: new }
之类的东西,并且由于{{$(this).serialize();
我遇到了将其他变量附加到数据上的问题。 1}}
PHP
if (isset($_POST['type']) && $_POST['type'] == 'email') {
$emailFrom = EMAIL_FROM;
$email_to = $_POST['email_to'];
$subject = $_POST['subject'];
$body = $_POST['body'];
if (mail($email_to, $subject, $body, "From: <$emailFrom>")) {
return 'Email was successfully sent!';
} else {
return 'An error occured, email could not be sent.';
}
exit();
}
JS
<script>
$(document).ready(function() {
$("#user_email").submit(function(e) {
var subject = $('#subject').val();
var _body = $('#body').val();
if (_body && subject) {
$.ajax({
type: "POST",
url: $(this).attr('action'),
data: $(this).serialize(),
success: function(data)
{
alert(data);
}
});
} else {
alert ('Subject and Body fields are both required.');
}
e.preventDefault();
});
});
</script>
HTML
<h3>Send <?php echo $row_users['full_name'];?> an email</h3>
<div class="ec-messages messages-warning" style="width:300px;">Emails will be sent from the website default.</div>
<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post" name="user_email" id="user_email">
<input name="email_to" type="hidden" value="<?php echo $row_users['user_email'];?>">
<label>Subject</label><input type="text" name="subject" id="subject">
<label>Body</label><textarea name="body" id="body" rows="10" class="span5"></textarea>
<?php echo createFormButtons(true, true); ?>
</form>
答案 0 :(得分:6)
if (isset($_POST['type']) && $_POST['type'] == 'email') {
}
以上条件会发现,如果名称为type
且值为&#39;的电子邮件地址为&#39;是否存在
由于您的ajax请求将整个HTML作为响应,这意味着此条件不符合
只需在表单中添加以下行
<input type='hidden' name='type' value='email' />
让我知道这是否适合您
答案 1 :(得分:3)
您正在收回整个页面,因为第一个条件未得到满足。
if (isset($_POST['type']) && $_POST['type'] == 'email')
我在表单中看不到名称为type
的任何输入,因此不会返回结果而exit
只是吐出整个页面。尝试添加
<input type="hidden" name="type" value="email" />
到表格,看看情况如何。
要添加到Op的查询jquery .serialize()
returns a string而不是添加隐藏的输入,您也可以尝试
data: $(this).serialize() + '&type=email'
我没试过这个,但应该可以。