X-core
@X-core
начинающий веб разработчик

Как реализовать отправку почты при помощи AJAX?

Создал функционал обратной связи, письмо на локальном сервере OpenServer приходит,на почту не приходит, так же не срабатываетAJAX функция( alert() , console.log() не срабатывают). Может я не правильно передаю с файла php в файл js.
Использую MVC структуру, Smarty.
В общем надеюсь решение вы подскажите.Спасибо!

file.htm (view)
spoiler
<form id="form" class="form-horizontal">
    <fieldset>
     <div class="control-group">
       <input type="text" id="name" name="name" placeholder="имя" class="input-xlarge" required="required" />
    </div>
    <div class="control-group">
      <input type="text" id="email" name="email" placeholder="email" class="input-xlarge"  required="required"/>
    </div>
    <div class="control-group">
       <input type="text"  id="subject"   name="subject" placeholder="тема" class="input-xlarge"  required="required"/>    
    </div>
    <div class="control-group">
      <textarea rows="3" id="msg" name = "msg" class="input-xlarge" placeholder="Укажите причину"  required="required"  >
      </textarea>
      </div>
      <button class="btn  btn-large btn-success" type="submit" onclick="mail();">Отправить</button>
    </fieldset>
    </form>


fileController.php

spoiler
function sendAction() {
  $name = trim(htmlspecialchars($_REQUEST['name']));
  $email = trim(htmlspecialchars($_REQUEST['email']));
  $subject = trim(htmlspecialchars($_REQUEST['subject']));
  $msg = trim(htmlspecialchars($_REQUEST['msg']));
  $headers = '';
  $headers .= "MIME-Version: 1.0\r\n";
  $headers .= "Content-type: text/html; charset=utf-8 \r\n"; //Кодировка письма
  $headers .= "From: Отправитель < $email >\r\n"; //Наименование и почта

  if ( (!empty($name)) && ( !empty($email)) && ( !empty($subject)) && ( !empty($msg))) {

       $to = 'fly_life@mail.ru';
       $message = "Имя: $name \nПочта: $email \nТема: $subject \nТекст: $msg";
       
        $resData =  mail($to, $subject, $message, $headers);

        if ($resData['success']) {
            $resData['success'] = 1;
            $resData['message'] = 'Письмо отправлено!';

        } else {
            $resData['success'] = 0;
            $resData['message'] = 'Ошибка отправки!';
        }

        echo json_encode($resData);
    } else {
        redirect('/');
    }

}


file.js
spoiler
function mail() {
    var name = $('#name').val();
    var email = $('#email').val();
    var subject = $('#subject').val();
    var msg = $('#msg').val();

    var postData = 'name='+name+'&email='+email+'&subject=' +subject+'&msg=' +msg;
    $.ajax({
        type: 'POST',
        async: true,
        url: '/contact/send/',
        data: postData,
        dataType: 'json',
        success: function (data) {
            console.log(data['message']);

            if(data['success']) {

                alert(data['message']);
            }else{
                alert(data['message']);
       
            }
        }
    })

  }
  • Вопрос задан
  • 318 просмотров
Решения вопроса 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
1) data['message'] это что за нотация для жс? Может data.message?
2) что пишет консоль браузера? Кучу ошибок?
3) Для начала смотрите что в нетворк вам вернул пхп скрипт, ну и что отправилось тоже надо бы посмотреть
4)
var name = $('#name').val();
    var email = $('#email').val();
    var subject = $('#subject').val();
    var msg = $('#msg').val();
    var postData = 'name='+name+'&email='+email+'&subject=' +subject+'&msg=' +msg;

можно заменить на var postData = $('.form-horizontal').serialize();

UPD: Автор повесил на кнопку субмит инлайновый вызов функции, который я проморгал. Так как запрос аякса вызывается параллельно с субмитом формы(по клику на кнопку типа субмит), то ясное дело яваскрипт отработать не успевал, а форма субмитилась на свой же урл. Такие вот косяки.
Для тех кто наткнется в будущем на подобное:
1) НЕ ВЕШАТЬ ИНЛАЙН ФУНКЦИИ НА ЭЛЕМЕНТЫ, ИСПОЛЬЗУЙТЕ МЕХАНИЗМ ЛИСТЕНЕРОВ.
2) Если страница перегружается - значит форма сработала явно, без аяксовой отправки(это можно было понять еще при упоминании того, что данные из нетворк отладчика "пропадают при отсылке аякса", но я опять же протупил)
3) не вешать события на клик, если это обработчик формы, это плохо во всех смыслах, мешает нормальной валидации, мешает предотвращению оправки формы через код, и вообще - это плохо.
Ответ написан
gds1
@gds1
Пыха - это наше всё)))
чего то я не вкурил:
-в файле file.js КУДА вы передаете данные, в какой php скрипт???
-в файле fileController.php как должна заработать функция? самопроизвольно? или при приходе данных? или при нажатии на кнопку?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы