CodeLAB
на главную карта сайта обратная связь

Популярные задачи:

#Передача данных из основного во всплывающее-popup окно через POST. (117062 hits)
#Динамическое изменение цвета полоски прокрутки в IE5.5 и выше. (31061 hits)
#Овал, вписанный в прямоугольник. (38056 hits)
#Предварительная загрузка изображений. (47376 hits)
#Полезные утилиты, небольшие api и библиотеки и проч.. (69881 hits)
#Улучшение быстрой сортировки. (77155 hits)
#Вычисление среднего, среднего отклонения, среднеквадратического отклонения и дисперсии заданной выборки. (46609 hits)
#Перестановка фрагментов строки(или одномерного массива). (60900 hits)
#Вращение фигуры в плоскости. (40203 hits)
#Обертки для массивов. (39030 hits)
#Выборка всех записей таблицы. (33650 hits)
#Рисование тора. (34917 hits)
#Рисование множества Мандельброта. (44544 hits)
#Вычисление минимального / максимального значения. (74632 hits)
#Глубокое полное клонирование. (36020 hits)
#Как посчитать одинаковые пары за 1 проход (самая быстрая версия!). (2295 hits)
#Добавление истории операций(undo&redo) в компонент. (40144 hits)
#Вычисление эксцесса и коэффициентов асимметрии заданной выборки. (45991 hits)
#Курсы валют. (67622 hits)
#Заливка замкнутой области. (62653 hits)


Главная >> Каталог задач >> Веб-разработка >> Клиентский скриптинг(js, vba и т.д.) >> popup ("всплывающие") динамические окна >> Передача данных из основного во всплывающее-popup окно через POST

Передача данных из основного во всплывающее-popup окно через POST

Aвтор:
Дата:
Просмотров: 117061
реализации(javascript: 1шт...) +добавить

В данной задаче решается следующая проблема.
Имеется некая javascript-функция. При выполнении эта функция должна открыть(создать) дополнительное popup, всплывающее окно передавая туда необходимые параметры, имеющиеся в виде js переменных в коде главного окна.
Что обычно делается в такой ситуации - вызывается window.open и указывается url, в составе которого добавляются все требуемые переменные, например:

 псевдокод: традиционно используемый способ  ссылка
  1. window.open('/server.php?param1=1111&param2=some%20datatopost&param3=and_etc..',
  2. 'winname',
  3. 'top=15,left=20');

НО: длина url ограничена.
В протоколе http указано рекомендуемое ограничение(1024 символа). На деле и веб-сервер и браузер имеют свое ограничение, поэтому неограниченной длины url вообще не может быть, и если ваши данные закодированные в виде строки url - слишком объемные - они просто обрежутся.

Один из обходных - это серверная реализация, т.е. при формировании на сервере страницы главного окна, мы необходимые параметры помещаем в сессию, а при открытии popup-окна - еще на сервере эти данные из сессии достаются и достигаются требуемые цели.
Но если данные требуемые для передачи - до сервера еще не дошли: например, они только что были введены в input-поля пользователем, то вы ими располагаете всего лишь в переменных javascript-а, откуда передать их в серверную сессию хотя и можно(ajax или постинг в iframe) - но не советуется, очень усложняется код, логика обработки, да и сессия засоряется лишними, временными данными, которые нужны лишь чтоб 1 раз передать из popup окну.

Что еще можно сделать? Да, конечно же, у нас же есть POST метод, но как передать данные из javascript-а post-ом в popup окно? Довольно нетравиальная задача.

К счастью, очень изящно и просто решается в нескольких строчках кода. Выход в том, что если в атрибуте "target" формы указать имя, назначенное popup окну - постинг формы(вне завистимости от того каким методом: post/get) будет осуществлен браузером - в это окно, вне зависимости от того, какой url у него был назначен до этого. Т.е.:

  1. Динамически создаем скрытую POST-форму(css display = none)
  2. Динамически добавляем туда в виде input-ов все необходимые значения
  3. Открываем popup окно с определенным именем(например, pop1)
  4. Присваиваем свойству target формы значение = имени popup окна(target="pop1" т.е.)
  5. Динамически добавляем форму на страницу главного окна(appendChild в document.body например)
  6. Отправляем форму(метод submit())
  7. Удаляем эту форму со страницы, т.к. больше она не нужна.

 

Реализации:

javascript(1)   +добавить

1) Передача данных из основного во всплывающее-popup окно используя POST на javascript, code #187[автор:this]