ajax联系表单不发送电子邮件

时间:2016-09-18 18:50:58

标签: javascript php jquery ajax forms

我整天试图解决问题,但没有成功。 表单不会发送消息而不会写入错误。

form.html

                <div class="ok" id="ok"></div>
                 <div id="data">              
                <div id="alert" class="alert_ig"></div>
                <form id="form" class=" clearfix"     method="POST" action="">

        <div class="col-sm-12">
          <div class="form-group">
            <input name="name" type="text" id="name" value="{$smarty.cookies.nameuser}" class="form-control" placeholder="Name"/>
          </div>
        </div>


       <div class="col-sm-12">
          <div class="form-group">
             <input name="email" type="email" id="email" value="{$smarty.cookies.emailuser}" class="form-control" placeholder="E-mail"/>
          </div>
        </div>
        <div class="col-sm-12">
          <div class="form-group">
               <textarea id="message" class="form-control" rows="5" name="text" placeholder="Message"></textarea>

          </div>
        </div>

                         <div class="col-sm-12">
          <div class="form-group">
                        <button style="margin-top:10px" id="submit" type="submit" class="bot_g">Send</button>

                          </div>
        </div>
                    </form>

       <script>
     $(document).ready(function() {
    $('#submit').click(function(e){
    var form = $(this); 
    var error = false;
    if (!error) {
        var data = form.serialize();
        $.ajax({ 
           type: 'POST',
           url: '{$home}/system/modules/contacts/send.php',
           dataType: 'json', 
           data: data, 
             success: function(data){ 
                if (data.error.length > 0) {
                    $('#alert').html(""+data['error']+"");
                   $('#email').addClass("fill");
                } else {
                    $('#ok').html('send.');
                        $( "#data" ).css( "display","none" );

                }
             },
             return false;
        )};
  });  
 </script>  
                            </div>

send.php

   <?php
   require_once '../../inc/core.php';

  $name=Text(trim($_POST['name']));
  $email=Text(trim($_POST['email']));
  $subject=Text(trim($_POST['subject']));
  $text=Text(trim($_POST['text']));


 if(empty($name)){
 $json['error'] = 'Come on, you have a name don\'t you?';
 echo json_encode($json);
 exit;
 }

 if (mb_strlen($name) < 2 || mb_strlen($name) > 250){
$json['error'] = 'Your name must consist of at least 2 characters!';
echo json_encode($json);
exit;
}

   if(empty($email)){
 $json['error'] = 'No Email, No Message!';
 echo json_encode($json);
 exit;
}

if (mb_strlen($email) < 5 || mb_strlen($email) > 64){
$json['error'] = 'Your email must consist of at least 5 characters!';
echo json_encode($json);
exit;
}

if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
$json['error'] = 'Unknown characters in your e-mail!'; 
echo json_encode($json);
exit;
}

if(empty($subject)){
$json['error'] = 'Um...yea, you have to write something to send this form.';
echo json_encode($json);
exit;
}

if (mb_strlen($subject) < 5 || mb_strlen($subject) > 250){
$json['error'] = 'Your subject must consist of at least 5 characters!';
echo json_encode($json);
exit;
}


 if (mb_strlen($text) < 2 || mb_strlen($text) > 10000){
$json['error']  = 'Thats All? Really?';
echo json_encode($json);
exit;
}

 $mailer = new phpmailer();
 $mailer->ContentType = "text/html";

 $mailer->From = $email;

  $mailer->Subject =  'New message from '.$home;
  $mailer->Body ="Subject: ".$subject."<br/>
            Name: ".$name."<br/>
            E-mail: ".$email."<br/>
            ".nl2br($text);

   $mailer->AddAddress($setup['emailadmin'], '');
  $mailer->Send();

    $json['error'] = 0; 
    echo json_encode($json); 
?>

这个代码什么时候出现问题? 我必须使用这个send.php格式,但可能会将ajax和html表单更改为工作...

感谢

1 个答案:

答案 0 :(得分:0)

var form = $(this); 

在这一行$(this);指向提交按钮,因此var表单存储您的提交按钮而不是表单元素本身。

您可能在客户端看不到错误,但如果您尝试调试发送到服务器端的数据,您将看到错误。

尝试使用与表单元素匹配的选择器替换$(this)。

此外,如果您想在服务器返回错误(例如500错误)时通知您的用户,您可以向$ ajax函数添加错误回调以及您已有的成功回调。

请在此处查看http://api.jquery.com/jquery.ajax/文档。

还要在事件处理程序的末尾添加e.preventDefault(),以防止在您想要执行ajax提交时提交表单的默认操作。