КАК сделать чтобы CGI программа возвратила результат в два фрейма на обном окне?
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



КАК сделать чтобы CGI программа возвратила... Expand / Collapse
Автор
Сообщение
01.11.2001 10:18
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 24.04.2002 10:25
Сообщ.: 72, Visits: 793
КАК сделать чтобы CGI программа возвратила результат в два фрейма на обном окне?
Смысл задачи:
Есть HTML окно которое разделено на два фрейма. В верхнем фрейме надо ввести кучу параметров запроса и по кнопке запустить Perl программу.
Программа возвращает результат в нижний фрейм и некоторую переменную в верхний фрейм. Т.е. нужно чтобы фрейм с параметрами не перезагружался заново, но чтобы он получил некоторую информацию о результате запроса.
Если кто знает подскажите...
Сообщ. #730996
02.11.2001 2:26
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 21.06.2006 23:51
Сообщ.: 326, Visits: 3 588
При помощи CGI именно так не сделать, но есть два варианта
1) JavaScript, который запускает невидимую форму во втором фрейме
2) Первый фрейм всё же рефрешится, но CGI заполняет все данные повторно. Правда при этом похоже нижний фрейм всё-равно без JScript не перегрузить.
Сообщ. #731166
02.11.2001 13:30
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 24.04.2002 10:25
Сообщ.: 72, Visits: 793
А нельзя ли поподробнее как это сделать через JavaScript?
Сообщ. #731241
03.11.2001 18:43
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 13.10.2006 1:31
Сообщ.: 143, Visits: 1 577
1)В форму пишем, что ответ пойдет в нижний фрейм:
print $query->startform(-action=>"$script_name/нижн_фрейм",-TARGET=>"нижн_фрейм");
2)кнопке Submit приписываем на JavaScript вызов нашего скрипта в верхний фрейм с каким-нибудь параметром
print $query->submit(-(onClick=>"parent.верх_фрейм.location.href=\'$script_name\/верх_фрейм\?qq=qq\'\;");
(можно без CGI.pm, но так как-то комфортнее;)
-Где переменная $script_name из CGI - имя и путь самой программы
-имена фреймов в пути после CGI дают знать CGI, что не нужно рефрешить фреймсет (может можно обойтись и без этого, я в данном случае использую чужие перловые идеи)
-параметр qq дает знать функции, выводящей данные в верхний фрейм, что надо дописать то, что ты хочешь
При этом в нижний фрейм выводится результат запроса, а в верхний - то, что требуется
Полный Perl-овый скрипт нужен?
Сообщ. #731360
05.11.2001 19:15
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 24.04.2002 10:25
Сообщ.: 72, Visits: 793
ДАВАЙ!!!
Сообщ. #731555
06.11.2001 0:48
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 13.10.2006 1:31
Сообщ.: 143, Visits: 1 577

#!/usr/local/bin/perl
use CGI qw(:standard);
$query = new CGI;

#Начинаем генерить HTML
print $query->header;

# Аналог пути к файлу во frameset.
$path_info = $query->path_info;

# Если данных о пути еще нет, задаем frameset
if (!$path_info) {
&print_frameset;
exit 0;
}

# начало, если указывать кодировку - пишем свой старт
print $query->start_html;

# вызываем функцию для верхнего фрейма
&print_query if $path_info=~/query/;
# вызываем функцию для нижнего фрейма
&print_response if $path_info=~/response/;

print $query->end_html; # конец


# задаем frameset

sub print_frameset {
$script_name = $query->script_name;
print "<html><frameset rows=\"50,50\">";
print "<frame src=$script_name\/query name=\"query\">";
print "<frame src=\"$script_name\/response\" name=\"response\">";
print "<\/frameset>";
exit 0;
}

sub print_query {
# верхний фрейм
# имя CGI
$script_name = $query->script_name;

print h1("Тут у нас запрос"), "";
# форма - начало ответ пойдет вниз
print $query->startform(-action=>"$script_name/response",-TARGET=>"response");
# всякая лирика
print "<p>Какой вопрос мы хотим задать? ",
# какие-нибудь элементы формы
$query->popup_menu(-name=>'vibor',
-values=>['первый ответ','второй ответ']);
# Кнопка Submit с JavaScript-ным OnClick-ом в верхний фрейм
print p($query->submit(-onClick=>"parent.query.location.href=\'$script_name\/query\?qq=qq\'\;"));
# конец формы
print $query->endform;

# Если был запрос
if (param("qq")) {
print h3("А тут пишется что-то, если был запрос");
}
return;
}

# нижний фрейм (основной ответ на запрос)
sub print_response {
print h1("Основной результат CGI"), "";
if (!($query->param)) {
# если еще ничего не передали в скрипт
print "<b>Ничего еще не передавали</b>";
return;
}
# А тут выводим собственно результаты обработки параметров
print "<P>А вот и ответ: <I>",$query->param(vibor),"</I>";
}

Результат можно посмотреть по адресу http://www.bio.pu.ru/cgi-bin/fr1.pl
Всех благ!
Сообщ. #731581
06.11.2001 14:05
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 24.04.2002 10:25
Сообщ.: 72, Visits: 793
Вот СПАСИБО!
Сообщ. #731689
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 3:35