Intereting Posts
Java mcrypt_create_iv Добавление дополнительного объявления после установленного номера абзаца Странное поведение с mysql_affected_rows () в PHP 401 Несанкционированный запрос DELETE для RESTful API в laravel через Ajax Facebook: «Этот код авторизации был использован.», «Type»: «OAuthException», «code»: 100 Composer Warning: расширение openssl отсутствует. Как включить в WAMP PHP – Промывка данных Loop с помощью Ajax Отсутствие повышения производительности с APC на WampServer Стоимость проверки времени изменения файла (PHP) Как правильно уничтожить cookie сеанса? Является ли порядок результирующего массива document.querySelectorAll («input [type = checkbox») гарантирован? Как удалить возврат каретки с вывода строки? Где лучше всего хранить соль для пароля для веб-сайта? PHP: как я могу заблокировать прямой доступ к URL-адресу для файла, но все-таки разрешить его загрузку вошедшим в систему пользователям? Вопросы о сфере применения PHP – с точки зрения Java-программиста

Отправка объекта FormData на сервер с помощью Ajax (содержит файлы)

У меня есть форма, которая имеет как текстовые, так и файловые поля. Я пытаюсь передать все это в php-скрипт, размещенный на сервере, и вернуть сообщение проверки. Моя форма выглядит так:

<form id="ambassador" method="post" enctype="multipart/form-data"> <label for="name">Name: </label> <input type="text" id="name"> <br /> <label for="age">Age: </label> <input type="number" id="age"> <br /> <label for="igram">Instagram Account: </label> <input type="text" id="igram"> <br /> <label for="photo">Photograph Upload: </label> <input type="file" id="photo"><br /> <label for="why">Why should you represent Drip Cold Pressed Juice?</label> <textarea id="why" width="300px"></textarea> <button type="submit" class="btn">Apply!</button> </form> 

И мой jQuery выглядит так:

 jQuery("#ambassador").submit(function(event) { event.preventDefault var server = "http://getdripped.com/dev/ambassador.php"; var form = document.getElementById('#ambassador'); var formData = new FormData(form); alert(formData); jQuery.ajax({ url: server, type: 'POST', data: formData, async: false, success: function (data) { alert(data) }, cache: false, contentType: false, processData: false }); return false; }); 

Php содержит только инструкцию print_r для массива $_FILES и другую для массива $_POST . Однако оба возвращенных массива пустые.

Solutions Collecting From Web of "Отправка объекта FormData на сервер с помощью Ajax (содержит файлы)"

У вас две проблемы.

Невозможность передать форму объекту FormData

 document.getElementById('#ambassador'); 

Метод getElementById принимает идентификатор, но вы передаете ему селектор . Вам нужно удалить # . В настоящее время вы передаете null в new FormData (потому что не существует соответствующего элемента, поэтому gEBId возвращает null ).

В форме нет успешных данных

 <input type="number" id="age"> 

Элементы управления формой могут быть успешными только в том случае, если у них есть атрибут name и ни один из них не работает.

После исправления идентификатора вы заполняете объект данных формы всеми успешными элементами управления в форме: но их нет.

Вам нужно добавить атрибут имени для каждого из ваших входов.

Я бы использовал iframe как цель формы.

  <form id="ambassador" method="post" enctype="multipart/form-data" target="form_iframe" > <iframe name="form_iframe" id="form_iframe" ></iframe> 

См. Также Как сделать загрузку асинхронных (AJAX) файлов с помощью iframe?

Игнорируйте нижний предел и

Установите async в true!

Вы устанавливаете асинхронное значение false. Это означает, что ваш обратный вызов успеха не будет ждать ответа и заканчивается для этого задолго до ответа PHP.


Также посмотрите на этот вопрос, так как есть ответ, если у вас возникнут дополнительные проблемы.

Из документации jQuery :

Обратите внимание, что синхронные запросы могут временно блокировать браузер, отключая любые действия, пока запрос активен.

Квентин был прав насчет сериализации, я удалил параметр serialize после дальнейшего чтения.