简体   繁体   English

Ajax 表单联系人 (jquery)

[英]Ajax form contact (jquery)

i have a problem with an ajax contact form.我有一个 ajax 联系表单的问题。 I have an xmlhttprequest error, but i don't know why.我有一个 xmlhttprequest 错误,但我不知道为什么。 Here is my code :这是我的代码:

<?php
if(isset($_POST)){
if(!empty($_POST['nom']) && !empty($_POST['email']) && !empty($_POST['date']) && !empty($_POST['message']))
{
    $message = '
            Quelqu\'un vous a contacter pour une prestation : \n:
            Nom du client : '.$nom.'\n
            Email du client : '.$email.'\n
            Date de la préstation : '.$date.'\n
            Message : \n 
            '.$message;
    if(mail('my.email@gmail.com', 'Demande de préstation MonSite', $message))
    {
        $msg = "Votre message à bien été envoyé. Nous vous répondrons dès que possible";
    }
    else
    {
        $msg = "Impossible d'envoyer le message, merci de nous contacter via <em>admin@site.fr</em>";
    }
    echo $msg;
}
}
?>

And this my js script :这是我的 js 脚本:

var form = $("#contact-form");
form.submit(function(){
    $(this).serialize();
    var data = [];
    data.email = $(this).find('input[name="email"]').val();
    data.nom = $(this).find('input[name="nom"]').val();
    data.date = $(this).find('input[name="date"]').val();
    data.message = $(this).find('textarea[name="message"]').val();
    $.ajax({
            url: 'contact.php',
            type: 'post',
            data: {data},
            success: function (msg) {
                form.append('<div class="form-status">' + msg + '</div>');
            },
                                error:function(jqXHR)
                    {
                        console.log(jqXHR);
                    }
        });
    return false;
});

My mail isn't send, and i've no callback, do you know why ?我的邮件没有发送,我也没有回电,你知道为什么吗? Cordialy亲切

There are several errors.有几个错误。

The data should be a valid object with key and value pair, yours is not: data应该是具有键值对的有效对象,您的不是:

data: {data:data}, 
//--key-^^^-^^^^----value

and this :和这个 :

var data = [];

should be an object instead of an array:应该是一个对象而不是一个数组:

var data = {};

$(this).serialize(); is not been assigned to any variable.未分配给任何变量。


I guess the ajax should have to be written like this:我想ajax应该这样写:

var form = $("#contact-form");
form.submit(function(){
    var data = {};
    data.email = $(this).find('input[name="email"]').val();
    data.nom = $(this).find('input[name="nom"]').val();
    data.date = $(this).find('input[name="date"]').val();
    data.message = $(this).find('textarea[name="message"]').val();
    $.ajax({
        url: 'contact.php',
        type: 'post',
        data: data, //because it is an object as you can see above | or just $(this).serialize(),
        success: function (msg) {
            form.append('<div class="form-status">' + msg + '</div>');
        },
        error:function(jqXHR){
              console.log(jqXHR);
        }
    });
    return false;
});

If you create data object you should use it without brackets in ajax.如果你创建数据对象,你应该在 ajax 中使用它而不使用括号。

data: data

And if you use form, you should prevent default form submit如果您使用表单,则应防止默认表单提交

form.submit(function(e){
   e.preventdefault();
     ...
   }

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

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