简体   繁体   English

AJAX联络表格无法正常运作

[英]AJAX Contact form doesn't work correctly

I have a form: 我有一个表格:

<form id="main-contact-form" name="contact-form" action="sendemail.php" method="post">
    <div class="form-group">
        <input type="text" name="name" class="form-control" required="required" placeholder="Name">
    </div>
    <div class="form-group">
        <input type="email" name="email" class="form-control" required="required" placeholder="Email">
    </div>
    <div class="form-group">
        <textarea name="message" id="message" required="required" class="form-control" rows="8" placeholder="Message"></textarea>
    </div>                        
    <div class="form-group">
        <input type="submit" name="submit" class="btn btn-submit" value="Send">
    </div>
</form>

sendememail.php is: sendememail.php是:

<?php

$name = htmlspecialchars($_POST["name"]);
$email = htmlspecialchars($_POST["email"]);

$to = "email@email.com";
$sub = "New message from site";

$message = "New message\n
Name: $name 
Email: $email";

$from  = "From: $name <$name> \r\n";

mail($to, $sub, $message, $from);
return;

?>

javascript is: JavaScript是:

var form = $('#main-contact-form');
form.submit(function(event){
    event.preventDefault();
    var form_status = $('<div class="form_status"></div>');
    $.ajax({
        url: $(this).attr('action'),
        beforeSend: function(){
            form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Sending...</p>').fadeIn() );
        }
    }).done(function(data){
        form_status.html('<p class="text-success">Thanks for you message!</p>').delay(3000).fadeOut();
    });
});

The problem: it sends a message to email, but without input fields. 问题是:它将消息发送到电子邮件,但没有输入字段。 Their value are empty. 它们的值是空的。 I tried to do that without JS, and it's sending every field correctly. 我试图在没有JS的情况下做到这一点,并且它正确地发送了每个字段。

You can use another type of form submit using jQuery ajax 您可以使用jQuery ajax使用另一种形式的表单提交

<script>
    $('#main-contact-form').submit(function(event){
    event.preventDefault();
    $.ajax({
        type:'post',
        url:'sendememail.php',
        data:$(this).serialize(),
        success:function(response){ 
            if(response==1)
            {   

                setInterval(function(){$('.review_form').html('<h5><center><div class="alert alert-success">Review Successfully Submitted......</div></center></h5>');},5);

            }
            else 
            {

                setInterval(function(){$('.review_form').html('<h5><center><div class="alert alert-danger">Sorry Your Review Was Not Submitted......</div></center></h5>');},5);

            }
        }

    });
});
</script>

Improved ajax request: 改进的ajax请求:

var form = $('#main-contact-form');
form.submit(function(event){
    event.preventDefault();
    var form_status = $('<div class="form_status"></div>');
    $.ajax({
        url: $(this).attr('action'),
        beforeSend: function(){
            form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Sending...</p>').fadeIn() );
        },
        // by default method is `GET`, set `POST` explicitly
        method: "POST",
        // provide data that you need in a `data` property
        // there can be many ways to collect your data
        // `serialize` is the simplest method for this case
        data: form.serialize()
    }).done(function(data){
        form_status.html('<p class="text-success">Thanks for you message!</p>').delay(3000).fadeOut();
    });
});

Specify the method and data you want to send through ajax as here is POST method: 指定要通过ajax发送的方法和数据,这是POST方法:

$.ajax({
        url: $(this).attr('action'),
        method: "POST",
        data: $(this).serialize();
    });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM