Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Передать $_POST в iframe (https://javascript.ru/forum/events/72807-peredat-%24_post-v-iframe.html)

rafaello 27.02.2018 15:08

Передать $_POST в iframe
 
Здравствуйте!
Что то я в трех соснах заблудился, прошу помощи.
Такая задача. При клике на ссылку открыть новое окно и туда передать $_POST запрос.
Новое окно открыть при помощи http://highslide.com/tutorial#iframe-content
то есть так:
<a href="includes/include.php" onclick="return hs.htmlExpand(this, { objectType: 'iframe', width: 1000 } )">Жмяк_здесь</a>

С этим понятно, проблем не возникает.
Но мне надо передать на страницу некоторые данные с той страницы, где размещена ссылка для открытия нового окна.
Я предполагаю это сделать так:
document.forms[0].action = 'includes/include.php';
document.forms[0].submit();

Как совместить эти два действия? Одновременно открыть новое окно и передать туда $_POST ?
Спасибо!

laimas 27.02.2018 15:09

Форме указать в качестве target iframe,

rafaello 27.02.2018 15:58

Это я понял, что надо сделать так
https://css-tricks.com/snippets/html...-to-an-iframe/

Но мне надо открыть новое окно именно в highslide
http://highslide.com/examples/iframe.html

Я может чего то недопонял, но мне надо открыть ифрейм именно в новом окне highslide ????????

laimas 27.02.2018 16:12

Цитата:

Сообщение от rafaello
Но мне надо открыть новое окно именно в highslide

И какие проблемы, если это плагин, который делает ajax запросы, и в котором в качестве объекта принимающего контент можно использовать и iframe. Отдавайте плагину url запроса, остальное он сделаем сам.

Документация же, чего не прочесть?

rafaello 27.02.2018 17:36

Уважаемый laimas!
Вы не хотите вникнуть в суть моего вопроса. Убедительная просьба к вам понять, что именно я спрашиваю!!
Вот смотрите.
Если следовать примеру http://highslide.com/examples/iframe.html то у нас есть ссылка, при клике на которую открывается некоторая страница "includes/include-short.htm" в новом окне.
<a href="includes/include-short.htm" onclick="return hs.htmlExpand(this, { objectType: 'iframe' } )">Жмяк здесь</a>

У меня же другая задача
На этой же странице, где расположена ссылка есть некая форма и вот данные этой формы надо отправить в новое окно. Чувствуете разницу?
<a href="includes/include-short.htm" onclick="return hs.htmlExpand(this, { objectType: 'iframe' } )">Жмяк здесь</a>
<form action="file.php" target="" method="post">	
  <label for="text">Some text:</label>
  <input type="text" name="text" id="text">	
  <input type="submit" value="post">	
</form>

1. Ссылка "Жмяк здесь" находится снаружи формы и не имеет отношения к событию "submit"
2. action формы и href страницы для открытия в ифрейме совершенно разные.
3. При клике на ссылку не надо отправлять форму по адресу action="file.php", а надо получить данные инпутов "text" и отправить эти данные методом POST по адресу href="includes/include-short.htm" и открыть новое окно

laimas 27.02.2018 17:59

Цитата:

Сообщение от rafaello
При клике на ссылку не надо отправлять форму по адресу action="file.php", а надо получить данные инпутов "text" и отправить эти данные методом POST

Охренеть. Если не надо отправлять форму, а получить только ее поля, получайте и в предварительно открытый фрейм помещайте их. Причем тут POST? Если данные формы нужно отправить серверу для обработки методом POST, а уже ее результат поместить во фрейм, то это ajax.

laimas 27.02.2018 18:42

Цитата:

Сообщение от laimas
а уже ее результат поместить во фрейм, то это ajax.

Либо как ранее говорилось, через target. Но имя фрейма скорее всего формируется случайно, тогда по событию отправки формы, его нужно получить подставив в форму.

onclick="return hs.htmlExpand(this, { objectType: 'iframe' }); form.submit()"

и

form.target = document.querySelector('iframe').name; //но форму отправлять надо по ответу ajax в плагине, то есть, если есть такое событие, иначе фрейм будет недоступен

Вот только ответ сервера затрет содержимое фрейма, а значит серверный сценарий должен обработать поля, подключить "includes/include-short.htm" вставив эти значения куда требуется и вернуть это как ответ, который и будет помещен во фрейм.

Иначе описание "чего хочется" на какой-то бред похоже, ну или описано дремуче и потому выглядит бредом.

rafaello 27.02.2018 18:53

Цитата:

Если не надо отправлять форму, а получить только ее поля, получайте и в предварительно открытый фрейм помещайте их.
а одновременно....?

laimas 27.02.2018 19:04

Цитата:

Сообщение от rafaello
а одновременно....?

А вы как думаете - можно послать серверу два запроса одновременно, и чтобы он два запроса одновременно обработал, и отдал ответы в два разных потока двум разным получателям?

У вас ведь и "хотелка", волосы дыбом. Как можно передать на страницу, которая уже открыта у клиента (include-short.htm), данные формы методом POST?!

rafaello 27.02.2018 19:16

Цитата:

У вас ведь и "хотелка", волосы дыбом. Как можно передать на страницу, которая уже открыт у клиента (include-short.htm), данные формы методом POST?!
А если такой вариант......
Давайте все упростим.
Есть обычная форма
<form action="includes/include-short.htm" target="" method="post">
<input type="text" name="text1" id="text1">			
<input type="text" name="text2" id="text2">		
<input type="submit" value="post">		
</form>

Как сделать так, чтобы при нажатии на input type="submit" страница "includes/include-short.htm" открылась в новом модальном окне (highslide). Или другими словами привязать событие
onclick="return hs.htmlExpand(this, { objectType: 'iframe' } )"
к нажатию на "submit"

Да, вы правильно заметили, что я заранее не знаю имя ифрейма, который формируется автоматом.

laimas 27.02.2018 19:28

Значится так - даже то, что окошко открылось, еще не означает, что форма знает о нем. Процесс этот асинхронный.

Если Iframe в плагине создается сразу при открытии окна, то достаточно того, чтобы плагин обладал методом, который позволяет обработать это событие. В этом методе и нужно отправлять форму, получив имя фрейма и подставив его в атрибут target формы.

В качестве url для плагина ничего не передается, то есть либо пусто, либо blanck.

А дальше как уже говорилось - сервер получает форму, обрабатывает, подключает include-short.htm, размещает в ней результат обработки и отдает страницу клиенту, которая и будет помещена во фрейм. Если includes/include-short.htm тоже файл исполняемый, на здоровье, это не принципиально.

А "привязать событие onclick="return ..." к к нажатию на "submit", это профанация.

rafaello 27.02.2018 19:47

Цитата:

Если Iframe в плагине создается сразу при открытии окна, то достаточно того, чтобы плагин обладал методом, который позволяет обработать это событие. В этом методе и нужно отправлять форму, получив имя фрейма и подставив его в атрибут target формы.
Возможно и есть такой метод, но в их тех.описании я его не нашел.
Тогда придется просто методом GET открывать новое окошко......

Спасибо, г-н laimas!

laimas 28.02.2018 00:23

Цитата:

Сообщение от rafaello
Возможно и есть такой метод, но в их тех.описании я его не нашел.

http://highslide.com/ref/hs.onActivate


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