Столкнулся с проблемой, как отпрвить файл на сервер, нашел решение:
допустим эта форма:
1 2 3 4 5 6 7 |
<form action="handler.php" method="post" id="my_form" enctype="multipart/form-data"> <label for="fio">Ф.И.О:</label> <input type="text" name="fio" id="fio"><br> <label for="avatar">Аватар:</label> <input type="file" name="avatar" id="avatar"><br> <input type="submit" id="submit" value="Отправить"> </form> |
код javascript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$(function(){ $('#my_form').on('submit', function(e){ e.preventDefault(); var $that = $(this), formData = new FormData($that.get(0)); // создаем новый экземпляр объекта и передаем ему нашу форму (*) formData.append('date_upl', new Date()); // добавляем данные, не относящиеся к форме. У нас - это дата $.ajax({ url: $that.attr('action'), type: $that.attr('method'), contentType: false, // важно - убираем форматирование данных по умолчанию processData: false, // важно - убираем преобразование строк по умолчанию data: formData, dataType: 'json', success: function(json){ if(json){ $that.replaceWith(json); } } }); }); }); |
* Обратите внимание на то, что передаем форму не объектом jQuery, а DOM-элемент
PHP-обработчик (файл handler.php)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php if(isset($_POST['fio'],$_FILES['avatar'])){ $req = false; // изначально переменная для "ответа" - false // Приведём полученную информацию в удобочитаемый вид ob_start(); echo '<pre>'; echo 'Имя пользователя: <strong>' , $_POST['fio'] , '</strong><br>Данные загруженного файла:<br>'; print_r($_FILES['avatar']); echo '</pre>'; $req = ob_get_contents(); ob_end_clean(); echo json_encode($req); // вернем полученное в ответе exit; } |
form.serialize — похоже не годится для отправки файлов