Загрузка/отображение картинки без перезагрузки страницы (AJAX, jquery)
Задача: без перезагрузки страницы нужно вывести на экран только что загруженную фотографию (не текст!).
Судя по комментариям в интеренте, рекомендуется использование iframe, однако вразумительного примера реализации я так и не нашел. Примечание: использовать дополнительные компоненты нежелательно (всяческие существующие file-uploader'ы). Буду признателен за советы, ссылки. |
|
melky, есть форма отправки данных, состоящая из одного инпута и кнопки
<form method='post' action="#?w=550" enctype='multipart/form-data'> <input type='file' name='image' maxlength='32' /> <br /> <br /> <input type='submit' value='Отправить' /> </form> выбираем картинку у себя на диске, нажимаем на кнопку "Отправить" - идет процесс загрузки, после которого должна отобразиться только что загруженная картинка на той же странице. пример по ссылке, я так понял, использует кучу дополнительных апи, мб как-то проще сделать можно? |
ога.
ну, если это находится на своём же домене,то все просто на странице форма, и скрипт. форма находится во ФРЕЙМЕ. когда она отправляется, фрейм скрывается, показывается анимация загрузки потом (да хоть через JSONP) показывается, что все хорошо (это снизу) работает php : пример аплоада в конце путь к файлу будет "/path/to/file/".$_FILES["filename"]["name"] пишем после фнукции перемещения файла это : (будет исполняться скрипт) echo '<script>show_jpg( "/path/to/file/'.$_FILES["filename"]["name"].'" );</script>'; т.е. во фрейме будет выводиться скрипт,который будет исполняться остается только описать функцию появления картинки (show_jpg()), которая и будет показывать картинку на сайте. мне это так представляется |
Необязательно всю форму во фрейм кидать. Можно поставить заранее спрятанный фрейм, а в акшене у формы указать ИД фрейма. Как то так:
<form action="#uploader" method="POST"> <input type="file" name="file" /> <input type="submit" /> </form> <iframe name="uploader" id="uploader" style="display: none;"></iframe> |
а , точно
про экшен забыл тогда и множественная загрузка легче делается |
посмотрите, что "сотворил" я, направьте на путь истинный, ибо как вставить картинку во фрейм, я не понял немного
<script> function check(newer) { params = "#uploader" request = new ajaxRequest() request.open("POST", "upload.php", true) request.setRequestHeader("Content-type", "application/x-www-form-urlencoded") request.setRequestHeader("Content-length", params.length) request.setRequestHeader("Connection", "close") request.onreadystatechange = function() { if (this.readyState == 4) { if (this.status == 200) { if (this.responseText != null) { document.getElementById('uploader').style.display='inherit'; <?php if (isset($_FILES['image']['name'])) { $saveto = "lmt_image/ava.jpg"; $dir = "lmt_image"; if (!file_exists($dir)) { $old = umask(0); mkdir($dir,0777); umask($old); } move_uploaded_file($_FILES['image']['tmp_name'], $saveto); } ?> } else alert("Ajax error: No data received") } else alert( "Ajax error: " + this.statusText) } } request.send(params) } function ajaxRequest() { try { var request = new XMLHttpRequest() } catch(e1) { try { request = new ActiveXObject("Msxml2.XMLHTTP") } catch(e2) { try { request = new ActiveXObject("Microsoft.XMLHTTP") } catch(e3) { request = false } } } return request } </script> <form action="#uploader" name="photo" enctype="multipart/form-data" onsubmit="check(this)" method="post"> <input type="file" name="image" size="30" /> <input type="submit" name="upload" value="Upload" /> </form> <iframe name="uploader" id="uploader" style="display: none;"></iframe> |
я вспомнил. было уже на этом форуме про загрузку файлов через AJAX. но тогда я нагуглил и кинул парню ссылку, где всё разжёвано (кстати,проверял на локалхосте сам. работает)
http://easy4web.ru/?p=681 и там как раз через ифрейм. посмотрите) как через аякс их грузить, мало умельцев. я пока этой темы не касался |
alexkill,
Бред какой то. Элементарная загрузка файла на сервер используя Iframe (примерно так, точно не помню): <form action="#uploader" method="POST" onsubmit="document.getElementById('uploader').onload = upload;"> <input type="file" name="file" /> <input type="submit" /> </form> <iframe name="uploader" id="uploader" src="/uploader/"></iframe> <script> function upload() { // Тут уже получаешь содержимое iframe (ответ от сервера). // Загрузка файлов происходит по адресу /uploader/ } </script> |
Часовой пояс GMT +3, время: 06:28. |