AJAX表单提交成功处理程序的问题

时间:2014-08-13 04:41:58

标签: php jquery ajax

我遇到一个问题,我的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>

2 个答案:

答案 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'

我没试过这个,但应该可以。