Заголовок сообщения: Отправка изображения на сервер через форму в другом фрейме Добавлено: 1 Декабрь 2006, 23:33:03
Задача:
Есть два фрейма. В первом - форма с полем ввода textarea, элементом для выбора файла (input type=file) и кнопка Send. Второй (1x1 пиксель) служит для отправки содержимого на сервер (чтобы отправлять введенные данные без перезагрузки страницы и мелькания блока с интерфейсом) - этакий Ajax времен первой мировой.
Если не учитывать возможность отправки файла на сервер - все тривиально: после нажатия на Send, дублируем содержимое формы в форму второго фрейма и делаем той форме submit(). Но как быть с полем для выбора файла?
Его value свойство не доступно для записи по понятным причинам, следовательно данное поле не скопировать в такое же поле второго фрейма. Была мысль, при щелчке на кнопку Browse первого фрейма вызывать метод .click() для "input type=file" элемента второго (невидимого фрейма), тогда пользователь выберет файл и он сразу окажется в нужном поле формы для отсылки. Выяснилось, что кроме как в IE, нигде .click() метод для поля выбора файла не работает.
Вопрос: как реализовать пересылку картинки на сервер в данном случае? Важно, чтобы визуально не был заметен процесс отсылки: типа нажал на кнопку Send - все отослалось и в интерфейсной части отобразился успешный статус.
1. Изначально сделать фрейм осмысленного размера и поставить контролы непосредственно в него.
2. По submit сделать фрейм размером 1x1 и перенести фокус в другое место.
1. Yes
2. А что отображать вместо? Три описанных выше контрола должны оставаться видимыми (textarea - очищаться). Не пропадать. То есть желаемый результат - это как если бы пользователь на форуме воспользовался функцией "быстрый ответ" (ajax), с функцией одновременной закачки изображений.
gregzem, не вижу ничего противоречащего здравому смыслу. Тебе нужна возможность асинхронной -- и, потенциально, пересекающейся во времени, кратной -- отправки запросов. Штатное решение -- для отправки каждого нового запроса создавать нового агента (фрейм), по окончании -- уничтожать агента или возвращать в пул для повторного использования.
Попробовал с фреймами.
Все работает, за исключением одного момента. При замещении содержимого одного фрейма другим область DIV (в которой расположен видимый фрейм с формой) где-то на полсекунды становится белой, затем появляется форма. Такое ощущение, что содержимое фрейма по второму разу загружается в него. Некрасиво выглядит, область фрейма мигает при отправке сообщения.
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.