Отправка файла через AJAX, используя PHPMailer

301
29 января 2018, 07:27

Не отправляется прикрепляемый файл. С форм данные приходят, но только не сам файл. Как передать AJAX-ом переменную $_FILES ???

HTML формы

<form action="" name="send-form" id="send-form" enctype="multipart/form-data">
    <div class="input-line">
        <input type="text" required name="email" placeholder="">
    </div>
    <div class="input-line">
        <input type="text" required name="search-name" placeholder="">
    </div>
    <div class="input-line">
        <input type="file" id="photo-file" name="photo" placeholder="">
    </div>
</form>

JS

$('#send-form').submit(function () {
var form_data = $(this).serialize(); 
    $.ajax({
    type: "POST", 
    url: "mail.php",
    data: form_data,
    success: function() {
        }
    });    
    return false;   
});

PHP обработчик

$mail->isSMTP();                                      
    $mail->Host = 'smtp.mail.ru';  
    $mail->SMTPAuth = true;                            
    $mail->Username = '';                 
    $mail->Password = '';                         
    $mail->SMTPSecure = 'ssl';                          
    $mail->Port = 465;                                   
    //Recipients
    $mail->setFrom('');
    $mail->addAddress($_POST['email']);    
    //Attachments
    $mail->addAttachment($_FILES["photo"]["tmp_name"],$_FILES["photo"]["name"]);    
    //Content
    $mail->isHTML(true);                                  
    $mail->Subject = 'Заявка c сайта';
    $mail->Body    = '<html>
                    <head>
                        <title>'.$subject.'</title>
                    </head>
                    <body>
                        <p>Почта для связи: '.$_POST['email'].'</p>
                        <p>Имя для поиска: '.$_POST['search-name'].'</p>    
                    </body>
                </html>';
    $mail->AltBody = '';
    $mail->send();
    echo 'Сообщение успешно отправлено';
} catch (Exception $e) {
    echo 'Не удалось отправить сообщение ', $mail->ErrorInfo;
}
Answer 1
$('#send-form').submit(function(e) {
    var $file = $('#photo-file'),
        $email = $('[name="email"]'),
        $search_name = $('[name="search-name"]'),
        frm = new FormData;
    frm.append('photo', $file.get(0).files);
    frm.append('email', $email);
    frm.append('search-name', $search_name);
    $.ajax({
        type: "POST",
        url: "mail.php",
        data: frm,
       success: function() {}
    });
})    
READ ALSO
Не одинаковы логические выражения

Не одинаковы логические выражения

Добрый день, хочу спросить, почему здесь в переменной if_2 выражения

206
Запуск loader пока грузиться страница

Запуск loader пока грузиться страница

Здравствуйте, как сделать loader на сайте? Отправляется запрос через AJAX, далее пока грузит вывод, показываем loader, ну типа картинка загрузкиНе...

167
Внутреннее устройство массива

Внутреннее устройство массива

в функцию массив не копируется, а передается ссылка

148
Uncaught TypeError: Cannot set property &#39;drawSquare&#39; of undefined(Пишу змейку на js помогите пожалуйста)

Uncaught TypeError: Cannot set property 'drawSquare' of undefined(Пишу змейку на js помогите пожалуйста)

Помогите с ошибкой Uncaught TypeError: Cannot set property 'drawSquare' of undefined

201