2016-09-18 3 views
0

Весь день я пытаюсь решить проблему, но безуспешно. Форма не отправляет сообщение, а не создает ошибку.ajax контактная форма не отправляет письмо

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 формы работать ...

благодаря

+0

1 - $ home: эта переменная печатает локальный путь или путь к общей папке apache? 2 - как вы печатаете эту переменную {$ home}? 3 - чтобы лучше отлаживать его, вы должны использовать параметры разработчика (щелкните правой кнопкой мыши, просмотреть элемент), затем откройте вкладку сети и нажмите кнопку , вы сможете проверить данные запроса, запросить url, ответ. поэтому вы можете определить причину ошибки –

+0

Работа с URL. $ home = (мой URL-адрес сайта) – Martinovska

+0

поэтому на вашем веб-сайте этот путь - это путь к файлу: /system/modules/contacts/send.php или что-то вроде/var/www/html/system/modules/contacts/send.php –

ответ

0
var form = $(this); 

В этой строке $ (это); ссылается на кнопку отправки, поэтому var form сохраняет вашу кнопку отправки вместо самого элемента формы.

Возможно, на клиентской стороне не обнаружена ошибка, но если вы попытаетесь отладить данные, отправленные на сервер, вы увидите, что что-то не так.

Попробуйте заменить $ (this) на селектор, соответствующий вашему элементу формы.

Кроме того, если вы хотите сообщить своим пользователям, когда сервер возвращает ошибку, например, например, ошибку 500, вы можете добавить обратный вызов ошибки к своей функции $ ajax, а также обратный вызов успеха, который у вас уже есть.

Загляните сюда http://api.jquery.com/jquery.ajax/ для документации.

Также добавьте e.preventDefault() в конец обработчика событий, чтобы предотвратить действие по умолчанию отправки формы, если вы хотите сделать ajax submit.

+0

Попробуй, но все равно не работай. – Martinovska

+0

Возможно, ваш URL-адрес тоже ошибается. Я не вижу, как javascript будет знать, что такое {$ home}. Постарайтесь скомпилировать его, чтобы отладить его. Также удалите return false из того места, где у вас есть. Я не думаю, что он делает что-то после метода успеха. – klikas

+0

Вы хотите дать мне простую? Я не могу решить проблему. – Martinovska

Смежные вопросы