Я пытаюсь отправить форму через jQuery. Моя форма содержит поля и файл, который необходимо загрузить. Он имеет тип ENCTYPE="multipart/form-data"
.
Я могу получить все свои значения поля, используя: post = $('#myForm').serialize();
Но как мне получить массив $_FILES
? Мне нужно это для обработки загруженного файла.
Возможно ли это с помощью jQuery, и если да, то как? Или мне нужно использовать специальный плагин для загрузки для jQuery?
Форма jquery – лучший способ сделать это, вы можете добавить ее в любую нормальную форму,
<form method="post" action="URL"> <input type="file" name="file"> <input type="text" name"text"> <input type="submit"> </form> <script type="text/javascript"> $(document).ready(function() { $(form).ajaxForm(); }) </script>
будет работать так, как ожидалось, но с ajax.
Вы не можете загружать файлы через javascript.
Проверьте этот связанный вопрос:
Можно ли использовать Ajax для загрузки файлов?
По сути, два самых популярных способа «подделки» AJAX для загрузки файлов – это использовать Flash-плагин, такой как SWFUpload, или передать форму в скрытый iframe, обрабатывающий запрос.
Форма содержит входной файл, но отсутствует метод = POST и enctype = multipart / form-data в форме. Файл не будет отправлен
Использовать FormData
<form> <label for="imageToSend">Cargar imagen a la galeria</label> <input type="file" name="imageToSend" id="imageToSend" value="Cargar imagen" /> </form> <script> $('#imageToSend').on('change',function(event){ var dialog = $('#dialog'); var Data = new FormData(); Data.append('imageToSend',$('#imageToSend')[0].files); $(this).val('');//Clear input file $.ajax({ url: "/upload", data: Data, processData: false, contentType: false, type:'POST', success: function(data){ if(data.success){ //success handler }else if(!data.success){ //error backend handler } }, error: function(data){ //error handler Ej:404 status } }) }); </script>
Если вы можете управлять средой, например, вы пишете приложение администратора для интрасети, в котором вы рекомендуете браузер, тогда реальная загрузка файлов AJAX возможна с Firefox 3 и выше. Во всех остальных случаях способ обхода iframe или загрузчик на основе Flash – это путь.
Это возможно, но не работает в Google Chrome) Посмотрите!
... <form method='post' enctype='multipart/form-data'> <input type="file" id="imf" name="imf"/> <input type="button" id="Save"/> </form> ... $("#Save").live("click", function(){ var photo = document.getElementById("imf"); var file = photo.files[0]; $.post('/user/saveNewPhoto', {'imf':file.getAsDataURL(), fname:file.fileName }, function( data ){ alert ( data ); }); });
загрузить скрипт нужно декодировать base64), и это все, но я не тестирую этот скрипт в файле большого размера