Как загрузить файл на форму если форма отправляется через Ajax?
Делаю попап в котором данные формы сириализуются и через ajax отправляются на сервер. С текстовыми полями все понятно, но как загрузить на форму файл ? как отследить что файл загрузился и только полсле этого отправить данные на сервер.....те как загрузить файл на форму если форма отправляется через Ajax ?
// готовим данные
var formData = new FormData();
var input = $('#myform')[0].files;
// добавляем файлы для отправки
jQuery.each(input, function (i, file) {
formData.append('file-' + i, file);
});
// добавляем путь (куда загрузить)
formData.append('uploadFile', 'myPath');
$.ajax({
type: 'POST',
url: 'myUrl',
data: formData,
cache: false,
processData: false,
contentType: false,
}).done(function (r) {
console.log(r);
});
// когда приходит пост запрос
if (isset($_POST['uploadFile'])) {
if (!empty($_FILES)) {
foreach ($_FILES as $file) {
// делаем что надо с полученными файлами
// $_POST['uploadFile'] - это myPath, который мы передали
}
}
}
vrazbros, formData.append('uploadFile', 'myPath'); добавляет новые поля в объект данных. Вместо serialize добавьте данные например в цикле обходя поля формы. Читайте FormData, там наверняка что-то есть на эту тему.
Возьмите какой-нибудь плагин для jQuery https://www.sitepoint.com/10-jquery-file-uploads/ . Большинство из них предоставляют прогресс бар в котором видна загрузка файла на форму, возможность удалить с формы до отправки на сервер.