Задать вопрос

Как загрузить файл на сервер через Ajax?

Есть функция, которая вызывается после выбора файла в input file и отправляет файл на сервер. Но прицепить файл к отправке не получается - отправляется пустой запрос.

var $fileCover = $('.editCover input[type=file]');

$fileCover.change(function(event) {  
  event.stopPropagation(); 
  event.preventDefault(); 

  formData = new FormData($fileCover[0].files);  // Код не добавляет файл в данные к отправке
  
  $.ajax({
            url: './CoverUpdate.php?uploadfiles',
            type: 'POST',
            data: formData,
            cache: false,
            dataType: 'json',
            processData: false, 
            contentType: false, 
            success: { // ответ сервера }
  });
  return false;
});
  • Вопрос задан
  • 764 просмотра
Подписаться 3 Оценить Комментировать
Решения вопроса 1
вот это не правильно - formData = new FormData($fileCover[0].files); // Код не добавляет файл в данные к отправке
надо так писать formData = new FormData($fileCover[0].files[0]); // Код не добавляет файл в данные к отправке
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
petermzg
@petermzg
Самый лучший программист
Для такой задачи лучше использовать XMLHttpRequest
Пример:
var form = av.closest('form')[0];
var xmlhttp = new XMLHttpRequest();
xmlhttp.open(form.method, form.action, true);
xmlhttp.onreadystatechange = function(){
            if (xmlhttp.readyState == 4){
                if (xmlhttp.status == 200){
                    xmlhttp.responseText;
                } else {
                    // empty
                }
            }
        };
xmlhttp.send(new FormData(form));
Ответ написан
Комментировать
Я так делаю.
<form method="post" enctype="multipart/form-data" target="iframe-upload" action="/ajax/upload_attach_file" id="form_upload">
				<input type="file" name="file">
			</form>
<iframe style="display: none; border:0" src="#" name="iframe-upload"></iframe>

$(document).on('change', 'input[type=file]', function() {
			$('#form_upload').submit();
})

Атрибут формы "target" отвечает за фрейм который будет грузить форму на сервер
Ответ написан
Комментировать
e-antonov
@e-antonov
Через XMLHttpRequest будет работать
true-coder.ru/php/ispolzovanie-obekta-formdata-dly...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
22 дек. 2024, в 14:07
15000 руб./за проект
22 дек. 2024, в 13:01
50000 руб./за проект
22 дек. 2024, в 10:44
15000 руб./за проект