ingenious_motherfucker
@ingenious_motherfucker
Решаю задачки

Какой самый простой способ прикрепить вложение к письму ajax?

Всем привет! Есть простейшая функция ajax по отправке данных формы на почту:
<form id="feedback-form">
    <input type="text" class="form-name" name="form-name" id="form-name">
    <input type="text" class="form-phone" name="form-phone" id="form-phone">
    <input type="file" class="form-file" name="form-file" id="form-file">
</form>

var form_data = $(this).serialize();
$.ajax({
	        type: "POST",
	        url: "send.php",
	        data: form_data,
	        success: function(){
	        }
});

<?php
$name=$_POST['form-name'];
$phone=$_POST['form-phone'];

$to = 'zhur48@yandex.ru';
$subject = 'Запись с сайта';
$message = "Имя: ".$name."\r\nТелефон: ".$phone;
$headers = 'From: info@site.ru';
mail($to, $subject, $message, $headers); 
?>

Какие минимальные изменения нужно произвести, чтобы в указанной форме файл отправлялся на почту вложением вместе с письмом? Перепробовал несколько вариантов, ничего не работает.
  • Вопрос задан
  • 498 просмотров
Пригласить эксперта
Ответы на вопрос 1
Immortal_pony
@Immortal_pony Куратор тега PHP
Изменения для PHP тривиальны, достаточно следовать документации: php.net/manual/ru/features.file-upload.post-method.php

Изменения для JS примерно следующие:
var form = $(this); // Предположу, что этот код выполняется в обработчике события 'submit' формы
var data = new FormData();  // Для отправки файлов понадобится объект FormData. Подробнее про него можно прочитать в документации - https://developer.mozilla.org/en-US/docs/Web/API/FormData



// Сбор данных из обычных полей
form.find(':input[name]').not('[type="file"]').each(function() { 
    var field = $(this);
    data.append(field.attr('name'), field.val());
});



// Сбор данных о файле (будет немного отличаться для нескольких файлов)
var fileField = form.find('input[type="file"]');
var fileName = filesField.attr('name').;
var file = filesField.prop('files')[0];
data.append(fileName, file) ;



// Отправка данных
var url = 'send.php';

$.ajax({
    url: url,
    type: 'POST',
    data: data,
    contentType: false,
    cache: false, 
    processData:false, 
    success: function(response) {
        /* Данные успешно отправлены */
    }	        
});
Ответ написан
Ваш ответ на вопрос

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

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