Возврат из PHP в AJAX

247
06 февраля 2018, 10:06

Отправляю сообщение на почту. Сообщение отправляется и приходит, но в ajax не срабатывает success (нет уведомления об успешности) - бесконечно крутится "обработка сообщения". В чем проблема?

Файл js

$(document).ready(function () {
    var regVr22 = "<div class='load'><div class='loading'><ul class='spinner'><li></li><li></li><li></li><li></li></ul></div><h6>Сообщение обрабатывается...</h6></div>";
    var files;
    //Заполняем переменную данными файлов, при изменении значения file поля
    $('input[type=file]').on('change', function () {
        files = this.files;
    });
    $("#send").click(function () {
        $("#loadBar").html(regVr22).show();
        var posName = $("#posName").val();
        var posPhone = $("#posPhone").val();
        var posEmail = $("#posEmail").val();
        var posBirthday = $("#posBirthday").val();
        var posCitizenship = $("#posCitizenship").val();
        var posCity = $("#posCity").val();
        var posMove = $("input:radio[name='move']:checked").val();
        var posExperience = $("input:radio[name='experience']:checked").val();
        //Создадим данные файлов в подходящем для отправки формате
        var data = new FormData();
        //Добавляем файлы, если они есть
        if (typeof files != 'undefined') {
            $.each(files, function (key, value) {
                data.append(key, value);
            });
        }
        data.append('posName', posName);
        data.append('posPhone', posPhone);
        data.append('posEmail', posEmail);
        data.append('posBirthday', posBirthday);
        data.append('posCitizenship', posCitizenship);
        data.append('posCity', posCity);
        data.append('posMove', posMove);
        data.append('posExperience', posExperience);
        data.append('my_file_upload', 1);
        $.ajax({
            type: "POST",
            url: "../process_php/send_job.php",
            dataType : "json",
            contentType: false,
            processData: false,
            cache: false,
            data: data,
            success: function (response) {
                var messageResp = "<div class='load'><div class='loading'></div><h6>Спасибо, <span>";
                var resultStat = "</span>! Ваше сообщение отправлено!</h6></div>";
                var oll = (messageResp + posName + resultStat);
                if (response == 1) {
                    $("#loadBar").html(oll).fadeIn(3000);
                    $("#posName").val("");
                    $("#posPhone").val("");
                    $("#posEmail").val("");
                    $("#posBirthday").val("");
                    $("#posCitizenship").val("");
                    $("#posCity").val("");
                } else {
                    $("#loadBar").html(response).fadeIn(3000);
                }
            }
        });
        return false;
    });
});

Файл php

<?php
header("Content-type: text/html; charset=utf-8");
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require '../lib/src/Exception.php';
require '../lib/src/PHPMailer.php';
require '../lib/src/SMTP.php';

$log == "";
$error = "no"; //Флаг наличия ошибки   
$posName = rec($_POST['posName']);
$posPhone = rec($_POST['posPhone']);
$posEmail = rec($_POST['posEmail']);
$posBirthday = rec($_POST['posBirthday']);
$posCitizenship = rec($_POST['posCitizenship']);
$posCity = rec($_POST['posCity']);
$posMove = $_POST['posMove'];
$posExperience = $_POST['posExperience'];

//Проверка email адреса
function isEmail($posEmail) {
    return (preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i", $posEmail));
} 
if ($posEmail == '') {
    $log .= "<h6>Пожалуйста, укажите Ваш email!</h6>";
    $error = "yes";
} else if (!isEmail($posEmail)) {            
    $log .= "<h6>Пожалуйста, убедитесь в правильности введенного email-адреса!</h6>";
    $error = "yes";
} 
//Проверка наличия введенного имени
if (empty($posName)) {
    $log .= "<h6>Пожалуйста, укажите Ваше имя!</h6>";
    $error = "yes";
}    
//Проверка наличия введенного номера
if (empty($posPhone)) {
    $log .= "<h6>Пожалуйста, укажите Ваш телефон!</h6>";
    $error = "yes";
}    
//Проверка наличия введенного года рождения
if (empty($posBirthday)) {
    $log .= "<h6>Пожалуйста, укажите Вашу дату рождения!</h6>";
    $error = "yes";
}   
//Проверка наличия введенного гражданства
if (empty($posCitizenship)) {
    $log .= "<h6>Пожалуйста, укажите Ваше гражданство!</h6>";
    $error = "yes";
}   
//Проверка наличия введенного города проживания
if (empty($posCity)) {
    $log .= "<h6>Пожалуйста, укажите Ваш город проживания!</h6>";
    $error = "yes";
}
//Проверка готовки в переезду
if (empty($posMove)) {
    $log .= "<h6>Пожалуйста, укажите готовы ли Вы к командировкам!</h6>";
    $error = "yes";
}
//Проверка наличия опыта
if (empty($posExperience)) {
    $log .= "<h6>Пожалуйста, укажите есть ли у Вас опыт работы в охранной сфере!</h6>";
    $error = "yes";
}
//Загрузка файлов на сервер
$uploaddir = '../uploads';
//Создадим папку, если её нет
if (!is_dir($uploaddir)) mkdir($uploaddir, 0777);
$files = $_FILES; //Полученные файлы
$done_files = array();
//Переместим файлы из временной директории в указанную
foreach($files as $file) {
    $file_name = cyrillic_translit($file['name']);
    if (move_uploaded_file($file['tmp_name'], "$uploaddir/$file_name")) {
        $done_files[] = realpath("$uploaddir/$file_name");
    }
}
//$data = $done_files ? array('files' => $done_files) : array('error' => 'Ошибка загрузки файлов.');
//die(json_encode($data));
//sleep(2);
//Если нет ошибок отправляем письмо  
if ($error == "no") {
    $mail = new PHPMailer(true);
    //Настройки сервера
    $mail->CharSet = 'UTF-8';
    $mail->SMTPDebug = 2;
    $mail->isSMTP();
    $mail->Host = 'smtp.oo-gsi.ru';
    $mail->SMTPAuth = true;  
    $mail->SMTPAutoTLS = false;
    $mail->Username = '*******';
    $mail->Password = '***********';
    //$mail->SMTPSecure = 'ssl';
    $mail->Port = 25;
    //Получатели
    $mail->setFrom('admin@oo-gsi.ru', 'Сайт ГСИ');
    $mail->addAddress('sbrujg@mail.ru', 'Охранная огранизация ГСИ');
    //Вложения
    foreach($files as $file) {
        $file_name = cyrillic_translit($file['name']);
        $mail->addAttachment("$uploaddir/$file_name");
    }
    //Содержание
    $mail->isHTML(true);
    $mail->Subject = 'Анкета для приема на работу';
    $mail->Body = 
        'Новая анкета для приема на работу в охранную организацию «ГСИ». <br><br>ФИО: '.rec($_POST['posName']).' <br>Телефон: '.rec($_POST['posPhone']).' <br>Email-адрес: '.rec($_POST['posEmail']).' <br>Год рождения: '.rec($_POST['posBirthday']).' <br>Гражданство: '.rec($_POST['posCitizenship']).' <br>Город проживания: '.rec($_POST['posCity']).' <br>Готовность к командировкам: '.rec($_POST['posMove']).' <br>Опыт работы в охранной сфере: '.rec($_POST['posExperience']).'';
    $mail->AltBody = 
        'Новая анкета для приема на работу в охранную организацию «ГСИ». //ФИО: '.rec($_POST['posName']).' /Телефон: '.rec($_POST['posPhone']).' /Email-адрес: '.rec($_POST['posEmail']).' /Год рождения: '.rec($_POST['posBirthday']).' /Гражданство: '.rec($_POST['posCitizenship']).' /Город проживания: '.rec($_POST['posCity']).' /Готовность к командировкам: '.rec($_POST['posMove']).' /Опыт работы в охранной сфере: '.rec($_POST['posExperience']).'';
    $mail->send();
    echo "1"; //Все отлично
} else { //Если есть ошибки
    echo "<div class='load'><div class='loading'></div><div class='errors'>".$log."</div></div>"; //Нельзя отправлять пустые сообщения
}
//Транслитирация кирилических символов
function cyrillic_translit($title) {
    $iso9_table = array(
        'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Ѓ' => 'G',
        'Ґ' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'YO', 'Є' => 'YE',
        'Ж' => 'ZH', 'З' => 'Z', 'Ѕ' => 'Z', 'И' => 'I', 'Й' => 'J',
        'Ј' => 'J', 'І' => 'I', 'Ї' => 'YI', 'К' => 'K', 'Ќ' => 'K',
        'Л' => 'L', 'Љ' => 'L', 'М' => 'M', 'Н' => 'N', 'Њ' => 'N',
        'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T',
        'У' => 'U', 'Ў' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'TS',
        'Ч' => 'CH', 'Џ' => 'DH', 'Ш' => 'SH', 'Щ' => 'SHH', 'Ъ' => '',
        'Ы' => 'Y', 'Ь' => '', 'Э' => 'E', 'Ю' => 'YU', 'Я' => 'YA',
        'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'ѓ' => 'g',
        'ґ' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo', 'є' => 'ye',
        'ж' => 'zh', 'з' => 'z', 'ѕ' => 'z', 'и' => 'i', 'й' => 'j',
        'ј' => 'j', 'і' => 'i', 'ї' => 'yi', 'к' => 'k', 'ќ' => 'k',
        'л' => 'l', 'љ' => 'l', 'м' => 'm', 'н' => 'n', 'њ' => 'n',
        'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't',
        'у' => 'u', 'ў' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'ts',
        'ч' => 'ch', 'џ' => 'dh', 'ш' => 'sh', 'щ' => 'shh', 'ъ' => '',
        'ы' => 'y', 'ь' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya'
    );
    $name = strtr($title, $iso9_table);
    $name = preg_replace('~[^A-Za-z0-9\'_\-\.]~', '-', $name);
    $name = preg_replace('~\-+~', '-', $name); // --- на -
    $name = preg_replace('~^-+|-+$~', '', $name); // кил - на концах
    return $name;
}
//Приведение введенного текста
function rec($pos) {
    return (trim(stripslashes(htmlspecialchars(addslashes($pos)))));
}
?>
Answer 1

В success возвращается json-объект, т.к. такую форму вы выбрали для обмена данными в dataType. В вашем случае преобразуйте ответ в строку функцией JSON.stringify(response).

READ ALSO
$test-&gt;lol = &ldquo;kek&rdquo; VS $test[&#39;lol&#39;] = &ldquo;kek&rdquo;; что лучше

$test->lol = “kek” VS $test['lol'] = “kek”; что лучше

задался интересным вопросом какую конструкцию лучше использовать strObj или переменную , в интернете ничего не нашел по этому поводу дельного

163
Вывод названий таблиц с помощью PHP

Вывод названий таблиц с помощью PHP

Имеется БД с неизвестным количеством таблиц

226
Собственный PHPMail в модальном окне на Wordpress

Собственный PHPMail в модальном окне на Wordpress

ЗдравствуйтеХотел бы сразу сказать, что популярные дополнения для WP с формами мне не подходят и поэтому ищу способ отправки собственных...

175
php preg_match помогите с выражением

php preg_match помогите с выражением

Нужно достать число от 4-6 символом из строки, что бы после неё не стояло через любое кол-во пробелов "руб" или "руб" Делаю так:

141