Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Загрузка аватарки без перезагрузки страницы (https://javascript.ru/forum/jquery/3726-zagruzka-avatarki-bez-perezagruzki-stranicy.html)

kez 18.05.2009 17:22

Загрузка аватарки без перезагрузки страницы
 
Доброго времени суток.
Подскажите какой аддон использовать для завгрузки аватарки/фото, что бы они сразу отображались на странице.
Если можно с примером.
Заранее спасибо!

x-yuri 18.05.2009 17:45

а без аддона как отображается?

grusha 19.05.2009 03:47

Вот ссылка на статью с примерами и по-русски http://web-linux.ru/?p=417
Так же посмотри здесь http://forum.antichat.ru/thread100550.html , этот вариант на мой взгляд один из лучших ...но использует uploadprogress (не у всех установлен) для PHP .

kez 19.05.2009 09:18

Серверная часть у меня не на php.
А можно сделать вместо стандартного инпут-тега "Обзор" ссылку "Добавить аватар" и при клики на ссылку открывать диалог для выбора файла. После подтверждения файл грузился бы на сервер и соотв у img менялся src.
Куда смотреть что бы реализовать такую конструкцию?

kez 19.05.2009 09:47

вроде нашел!
тут

kez 19.05.2009 11:32

Возникла проблема.
у моего html документа структура
...
<form id="1">
<table>
<tr>элементы</tr>
<tr>элементы</tr>
<tr><img ... /> добавить фото</tr>
..
</table>
</form>

изобразил в виден картинки

и я подключил плагин One Click Upload. Насколько я понимаю для передачи multipart/form-data т.е. файла используется форма.
вложенные формы у нас не поддерживаются. как мне выйти из положения, если я не могу отказаться от внешней формы, т.к. с помощью нее данные уезжают на сервер при сабмите.
попробовать перекроить верстку и разбить на пару таблиц каждая в своей форме?

x-yuri 19.05.2009 14:57

а вложенные формы ввобще не поддерживаются: ты можешь посмотреть как браузеры реагируют на внутреннюю форму, может они ее просто игнорируют

еще можнододелать плагин, чтобы форма вставлялась перед отправкой файл и удалялась - после

еще можнол поискать другой плагин

еще есть swfupload

kez 19.05.2009 15:22

так мне кажется что все они основаны на формах. я не прав?

Цитата:

еще можнододелать плагин, чтобы форма вставлялась перед отправкой файл и удалялась - после
а можно поподробнее?

x-yuri 19.05.2009 15:59

Цитата:

так мне кажется что все они основаны на формах. я не прав?
большинство, но могут быть такие, которые рассчитывают на текущую форму (что она подходит для отправки файла), а не создают свою
есть еще основанные на flash'е

Цитата:

а можно поподробнее?
а что подробнее? Берется исходник и доводиться до нужного поведения. Или мне за тебя это сделать и выложить здесь исправленную версию? Могу только помочь, т.е. нужны конкретные вопросы

kez 19.05.2009 16:13

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

x-yuri 19.05.2009 16:24

нужно так: поискать вокруг форму, если нету, то обернуть текущий элемент в форму, если есть - проверить ее enctype, ну еще, может, что-нибудь подправить

p.s. формы не могут быть вложенными - http://www.w3.org/TR/html401/interac...html#edef-FORM
<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM) -- interactive form -->

grusha 19.05.2009 21:07

Вот еще форма для загрузки http://www.uploadify.com/ , работает на Flash , но есть возможность изменить вид кнопки и убрать форму после загрузки файла.У меня реализовано так: разрешено загружать 3 файла, после загрузки 3-его форма убирается.

Цитата:

Возможно ли это?
Суть задачи при загрузке аватарки нужно проверить вес и размеры изображения. интересно можно ли это здедать на стороне клиента?
Также эта форма позволяет определить как вес файла , так и его размер. Вес файла определяет до нажатия кнопки , а размеры ,после нажатия кнопки "загрузить".У меня реализованно так: стоят минимальные размеры изображения , 150 px на 150 px, если размеры меньше , то выдает алерт с текстом и картинка не грузится.

kez 20.05.2009 10:23

grusha, красивая реализация, но много зачачивать т.к. у меня серверная сторона не пхп

kez 20.05.2009 10:30

x-yuri, а неподскажите, пожалуйста как самым красивым способом узнать есть ли у элемента форма?

Kolyaj 20.05.2009 10:51

Цитата:

Сообщение от kez
узнать есть ли у элемента форма?

element.form

kez 20.05.2009 11:24

alert($('#upload1').form) возвращает undefined
я мало знаком с jQuery. хотелось бы именно ее средствами

kez 20.05.2009 11:44

во!
$('#upload1').parents("form")

kez 20.05.2009 12:23

не могу понять

Код:

        var form;
        if($('#upload1').parents("form").size() > 0){
            form = $('#upload1').parents("form");
            $(form).attr("enctype", options.enctype);
            alert($(form).attr("enctype"))
        }else{
            form = $(
                '<form '+
                'method="post" '+
                'enctype="'+options.enctype+'" '+
                'action="'+options.action+'" '+
                'target="iframe'+id+'"'+
                '></form>'
                ).css({
                margin: 0,
                padding: 0
            });
        }

в options.enctype значение 'multipart/form-data'
я его устанавливаю
Код:

$(form).attr("enctype", options.enctype);
но когда пытаюсь сразу получить его
Код:

alert($(form).attr("enctype"))
там application/x-www-form-urlencoded

x-yuri 20.05.2009 15:10

Цитата:

alert($('#upload1').form) возвращает undefined
alert($('#upload1')[0].form)


Цитата:

я его устанавливаю
alert( options.enctype );

kez 20.05.2009 15:33

почему то при такой конструкции все заработало.
понимаю что глупо, но по какой то причине так заработали обе формы(вложенная и внешняя). т.е. сейчас и файл грузится и данные после этого адекватно сохраняются.

var form;
if(element.parents("form").size() < 0){
}else{

form = $(
'<form '+
'method="post" '+
'enctype="'+options.enctype+'" '+
'action="'+options.action+'" '+
'target="iframe'+id+'"'+
'></form>'
).css({
margin: 0,
padding: 0
});

}

x-yuri 20.05.2009 16:51

при такой конструкции form в документ не добавляется
и что, браузер делает 2 запроса?

kez 20.05.2009 17:54

видимо скрипт добавляет iframe в текущую форму. файл отправляется нормально, после этого при сабмите данные уходят нормально на сервер и сохраняются. не красивое решение, но проблема решилась

x-yuri 20.05.2009 20:35

можно еще эту тему почитать - http://javascript.ru/forum/jquery/36...d-fajjlov.html

kez 20.05.2009 23:24

да в принципе если работает, то пусть работает.
печально что непонятно почему оно работает)

x-yuri 21.05.2009 00:30

действительно печально... так разберись ;)

kez 21.05.2009 09:44

я правильно понимаю что при энкодинге формы
application/x-www-form-urlencoded
файл передаваться не должен был?

x-yuri 21.05.2009 16:04

скажем так, файлы должны передаваться в multipart/form-data

kez 21.05.2009 16:18

хм. посмотрел структуру DOM. создается вложенная форма и iframe но при этом все прекрасно работает )

kez 21.05.2009 16:27

По ходу пьесы появилось еще одно желание - откреплять эти самые аватары.
проблема с откреплением и созданием новой ссылки решибась без особых проблем. проблема возникла когда задумался о том где брать картинку/заглушку, если я ее с сервера не грузил )
т.е. мы заходим в профиль человека и видим там загруженную ранее аватарку. нажимаем ссылку УДАЛИТЬ и обращаемся к серверу, на сервере картинка трется, но надо ведь вставить пустышку в img, но ее то с сервера не грузили.
сейчас
Цитата:

$('#foto').attr('src', '');
но как то совсем не красиво.
что посоветуете?

x-yuri 21.05.2009 16:57

либо $('#foto').attr('src', '<путь к аватарке по умолчанию>');
либо убрать место под аватарку

kez 21.05.2009 17:30

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

x-yuri 21.05.2009 17:35

при чем тут логический диск? Под словом "путь" я подразумевал URL

kez 22.05.2009 09:34

так при этом перезагрузки страницы то не будет, а картинка(заглушка) с сервера не загружалась. или должно сработать?

x-yuri 22.05.2009 10:20

а ты что попробовать боишься?
p.s. "я даже немного завидую - тебя ждет еще много удивительных открытий :)", вспомнилось

kez 22.05.2009 11:01

попробовал! и в правду работает)
думал всегда что для получения данных если страница загружена полность нужно пользоваться аяксом т.е. инициировать запрос, а тут чудо такое )

x-yuri 22.05.2009 11:12

но ведь при изменении window.location браузер переходит на другую страницу? А что ему остатается делать при изменении URL каритинки? Либо запретить это действие, либо загрузить новую картинку


Часовой пояс GMT +3, время: 21:16.