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']);
       
            }
        }
    })

  }
  • Вопрос задан
  • 308 просмотров
Решения вопроса 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 как должна заработать функция? самопроизвольно? или при приходе данных? или при нажатии на кнопку?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы