Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Вызов процедуры из скрипта


Автор: dron000 17.12.2009, 11:22
Добрый день!

Есть перловый скрипт main.pl c кучей процедур, генерящих в том числе основную html форму, необходимо по нажатию кнопки на форме запускать процедуру proc1 из этого же скрипта и после ее отработки либо выводить строчку об успешном выполнении под кнопкой либо всплывающее окошко(можно что-то типо хинта) не меняя и не перерисовывая остальную часть формы на которой нажимается кнопка. Как можно это сделать?

Спасибо!

Автор: DEER 18.12.2009, 00:27
смотри в сторону AJAX

Автор: dron000 18.12.2009, 09:38
Да я вроде увидел неплохое решение со всплывающими окнами.Остался вопрос- как вызвать perl-процедуру по нажатию кнопки с html странички так чтобы не перезагружать страничку.Нажал- отработала perl- процедура.

Автор: DEER 18.12.2009, 10:08
нажал на кнопку - js script вызывает на стороне сервера по Http процедуру
она отработала - вернула в Js результат
Что сложного? smile
http://www.rsdn.ru/article/inet/jQuery.xml#EAIAE

Автор: dron000 18.12.2009, 10:49
Процедура находится в perl-скрипте в котором еще много чего есть. Вот как к ней обратиться? 

Автор: DEER 18.12.2009, 17:51
нууууу
ты CGI скрипты делал когда нить?
вот
делаешь себе на сервер запрос к скрипту ttt.cgi
в этом скрипте выполняешь процедуру.


Или я что то не понимаю?

Автор: dron000 18.12.2009, 18:58
smile  smile  smile ...А ты выше читал?

Добавлено через 5 минут и 27 секунд
Раз так все очевидно не мог бы ты указать каким именно образом с html страницы вызывается перловая процедура например proc содержащаяся в main.pl ?

Заранее спасибо!

Добавлено через 6 минут и 58 секунд
да...чуть не забыл...это все что должно происходить.

Автор: kavkaz 18.12.2009, 19:05
dron000, а вы прочитали про AJAX, как вам рекомендовали ?

у вас проблема с запуском скрипта? с вызовом процедуры в нем? 

Автор: dron000 18.12.2009, 19:11
Мне не нужно огород городить, просто вызвать перловую процедуру из скрипта....

Автор: ginnie 18.12.2009, 19:22
dron000, Вам надо модифицировать mail.pl так, чтобы была возможность выполнить из него только процедуру func1().

Например: 

Код

if ( $cgi->param('call_func1') ) {
    func1();
    print_headers();
    print_results();
}
else {
    ...
}

Автор: dron000 18.12.2009, 21:41
Ок. Лучше тогда отдельный создать. А как именно,вызвать так чтобы html форма из которой он вызван не изменилась, т.е. он у меня ничего не рисует и ничего что меняло бы данные на форме не делает,мне просто нужно чтобы он выполнился по нажатию на кнопку. 

Автор: DEER 19.12.2009, 00:17
если будешь использовать jQuery, то код будет примерно такой
Код

$.get(
  '/adress_scripta.pl',
  {
    kakoi_nibud_param_esli_nuzhen: "ego_znachnie"
  }
);

Автор: dron000 19.12.2009, 00:28
Это из html страницы такой запрос прокатит? А стандартные методы есть?

Автор: DEER 19.12.2009, 10:58
прокатит. то код из js функции, которую надо вызвать на странице
стандартные есть. но это проще и кроссбраузерно

Автор: dron000 21.12.2009, 16:08
Есть у меня кнопочка на странице:
Код

<script LANGUAGE="JavaScript">
function onPush() {

вызов скрипта script.pl  !!!

alert("Скрипт отработал!");
}
</SCRIPT>

<INPUT TYPE="BUTTON" NAME="Button1" VALUE="Намите" onclick="onPush()">


Как зыпустить скрипт на выполнение так чтобы отсаться на текущей странице?

Автор: DEER 21.12.2009, 23:20
ну ведь все написал ведь  smile
Код

<script LANGUAGE="JavaScript">
function onPush() {
$.get(
  '/adress_scripta.pl',
  {
    kakoi_nibud_param_esli_nuzhen: "ego_znachnie"
  }
);
alert("Скрипт отработал!");
}
</SCRIPT>
<INPUT TYPE="BUTTON" NAME="Button1" VALUE="Намите" onclick="onPush()">

только перед запуском скачай jQuery
и пропиши в head (перед описанием функции onPush)
Код

<script type="text/javascript" src="/js/jquery.js"></script>

соответственно "/js/jquery.js" - относительный путь к файлу библиотеки

Добавлено @ 23:24
а ещё лучше
Код

<script LANGUAGE="JavaScript">
function onPush() {
$.get(
  '/adress_scripta.pl',
  {
    kakoi_nibud_param_esli_nuzhen: "ego_znachnie"
  },
  onAjaxSuccess
);
}
function onAjaxSuccess {
alert("Скрипт отработал!");
}
</SCRIPT>
<INPUT TYPE="BUTTON" NAME="Button1" VALUE="Намите" onclick="onPush()">

Тогда, скрипт выведет сообщение, если только фунция из перла отработает нормально.
В противном случает ничего не произойдет.

Автор: dron000 22.12.2009, 10:30
Спасибо.Ща попробую

Автор: dron000 22.12.2009, 12:23
Загрузил jquery разместил все везде где нужно при попытке обратиться к jquery.js сообщение apache 
Premature end of script headers: jquery-1.3.2.js 

Автор: DEER 22.12.2009, 12:32
код давай!

Автор: ginnie 22.12.2009, 12:39
dron000, у Вас apache почему-то пытается выполнить js-файл, вместо того, чтобы просто отдать клиенту его содержимое. Скорее всего дело в настройках apache.

Автор: kavkaz 22.12.2009, 13:48
продолжая мысль ginnie, предположу что этот самый *.js лежит в cgi-bin, где апачем прописано исполнять любые файлы

Автор: dron000 22.12.2009, 14:13
Да но при перекладывании в другую он отдает клиенту содержимое (это видно потому что выполненение тела скрипта продолжается),но при обращении непосредственно к его частям ошибка та же.

Автор: dron000 22.12.2009, 14:30
Может некорректно оформлен jquery.js ?Как я понимаю первая строчка - путь к интепретатору?

Добавлено через 10 минут и 12 секунд
Код perl такой:

Код


print '<script type="text/javascript" src="/jquery-1.3.2.js" script LANGUAGE="JavaScript">

function onPush() {
$.get(
  \'script.pl\',
  {
    
  },
  onAjaxSuccess
);
}

function onAjaxSuccess {
alert("Скрипт отработал!");
}
</SCRIPT>';

print '<INPUT TYPE="BUTTON" NAME="Button1" VALUE="Намите" onclick="onPush()">';


Строку интерпретатора #! убрал, jquery-1.3.2.js не в cgi-bin. Страница загружается,а вот когда наживаешь на кнопку в левом ниженем углу - ошибка на странице, в логах пусто.

Автор: dron000 22.12.2009, 15:21
Если смотреть html код печатаемый на страницу:
Код

<script type="text/javascript" src="/jquery-1.3.2.js" script LANGUAGE="JavaScript">

function onPush() {
$.get(
  'script.pl',
  {
    
  },
  onAjaxSuccess
);
}

function onAjaxSuccess {
alert("Скрипт отработал!");
}
</SCRIPT><INPUT TYPE="BUTTON" NAME="Button1" VALUE="Намите" onclick="onPush()">

Автор: Bulat 22.12.2009, 15:40
Цитата(dron000 @  22.12.2009,  12:23 Найти цитируемый пост)
Premature end of script headers: jquery-1.3.2.js  


Открой свой "жс"ник в каком-нить иде и проверь на кодировку, на то какими символами заканчиваются строки и т.п.  Как правило такие ошибки из-за подобных мелочей, подводных камней и прочего, что явным образом не влияет на работу самого алгоритма smile

Автор: DEER 22.12.2009, 15:50
во первых ошибка оформления - может ошибся когда набирал...
сделай, чтобы выводился такой текст
Код

<script type="text/javascript" src="/jquery-1.3.2.js"></SCRIPT>
<script type="text/javascript" >
function onPush() {
$.get(
  'script.pl',
  {
    
  },
  onAjaxSuccess
);
}
function onAjaxSuccess {
alert("Скрипт отработал!");
}
</SCRIPT><INPUT TYPE="BUTTON" NAME="Button1" VALUE="Намите" onclick="onPush()">

у тебя точно-точно jquery-1.3.2.js лежит в корневой директории сайта?
судя по твоему примеру она у тебя должна лежать в www папке (короче там, где index.html)

Добавлено через 2 минуты и 12 секунд
и путь к script.pl проверь!
он у  тебя странный. хотя бы так "/script.pl", если он лежит в корневой папке сайта, иначе ещё путь к нему надо указывать (/cgi-bin/script.pl)

Автор: dron000 22.12.2009, 16:38
Насчет jquery.js  - он с офф сайта и я его не менял.Просмотрел- с виду все ок.
Когда разделил на два тега: 
Код

<script type="text/javascript" src="/jquery-1.3.2.js"></SCRIPT>
<script type="text/javascript" >

В access логе ушло обращение к jquery-1.3.2.js - думаю это не очень хорошо.
jquery-1.3.2.js - точно лежит в www.
Путь к script.pl  верный т.к. страницу на которой эта несчастная кнопка рисует pl скрипт в этой же 
папке /cgi-bin/

Автор: DEER 22.12.2009, 16:48
неее

Добавлено через 21 секунду
пиши полный путь к файлу /cgi-bin/script.pl

Автор: dron000 22.12.2009, 17:01
Попробовал- не помогло.Кроме того это будет неверно т.к.  если задать так он выйдет на папку вверх а уж там точно script.pl нет-он в текущей папке откуда работает скрипт рисующий саму форму.

Автор: dron000 23.12.2009, 11:23
Как можно еще проверить что jquery подгружается? И нужна ли все-таки строка доступа к интерпретатору в начале? Есть еще способ запуска скрипта без анализа возврата без аякса?

Автор: DEER 23.12.2009, 12:51
попробуй так
Код

<script type="text/javascript" src="/jquery-1.3.2.js"></SCRIPT>
<script type="text/javascript" >
function onPush() {
alert("Я В onPush");
$.get(
  'script.pl',
  {
    
  },
  onAjaxSuccess
alert("Я послал запрос! Жду ответ");
);
}
function onAjaxSuccess {
alert("Скрипт отработал!");
}
</SCRIPT><INPUT TYPE="BUTTON" NAME="Button1" VALUE="Намите" onclick="onPush()">


если пользуешься FF, то там есть Консоль Ошибок (Ctrl + Shift + J) можно после загрузки страницы или после нажатия кнопки посмотреть какая ошибка

Автор: dron000 23.12.2009, 14:01
Не помогло...все тоже - при нажатии кнопки в левом нижнем углу - ошибка на странице.

Автор: DEER 23.12.2009, 14:29
какая ошибка?

Добавлено через 1 минуту
прикрепи архив с файлами - я у себ попробую посмотреть и если что  поправлю

Автор: dron000 23.12.2009, 15:54
Онсновная форма file.pl Сами понимаете- все обрезано, но и в таком варианте тож самое.

Автор: DEER 23.12.2009, 16:47
а script.pl где????
если это sverka.pl , то надо поменять имя файла во первых.
Во вторых sverka.pl должен быть CGI приложением (так же как file.pl отдавать нужный аголовок браузеру и т.п.

Автор: dron000 23.12.2009, 18:48
Ну да это он и есть...И это уже я переименовал.Кроме того мне нужно чтобы он просто отработал ничего не поменял и не возвращал ничего браузеру.

Автор: DEER 23.12.2009, 19:35
не, браузеру он должен возвращать 200 статус. Иначе js думает, что не отработало

Я севодня добрый и все починил.
что я убрал:
1 закоментировал вызов процедуры - раскоментируйте у себя, потому что я не могу ещё и в ней разбираться а вас.
2 Переписал первую строчку в pl файлах, чтоб они у меня запускались - верните на свои значения.

вроде все.
у меня работает


Автор: DEER 23.12.2009, 19:35
ещё jQuery другой залил, ибо тот какой то битый

Автор: dron000 23.12.2009, 22:19
Ок.Спасибо.Гляну.

Добавлено через 1 минуту и 11 секунд
А ....чуть не забыл.....у тебя-то заработало?

Добавлено через 2 минуты и 33 секунды
Блин...не увидел верхнее! smile 

Автор: DEER 23.12.2009, 22:42
а вообще, прочти какую нить книжку по веб+перл

Автор: mvsgt 24.12.2009, 09:44
Цитата(DEER @  23.12.2009,  22:42 Найти цитируемый пост)
а вообще, прочти какую нить книжку по веб+перл 


А это ещё зачем? 

Автор: dron000 24.12.2009, 11:18
Такое ощущение что результат кэшируется или что-то в этом духе....потому что выполняется скрипт только первый раз. Далее при повторных нажатиях на кнопку тупо всплывают таблички и  и как такового запуска скрипта не происходит.

Автор: DEER 24.12.2009, 12:14
чтобы не кешировалось, можно вместо
Код

  \'/cgi-bin/sverka.pl\',

написать
Код

  \'/cgi-bin/sverka.pl?t=\'+new Date().getTime(),



Автор: dron000 24.12.2009, 12:40
Спасибо!Работает.Откуда ты это узнал - дай сслыку.  smile 

Автор: DEER 24.12.2009, 12:49
Google.com  smile 

Автор: sir_nuf_nuf 24.12.2009, 14:08
Цитата

 \'/cgi-bin/sverka.pl?t=\'+new Date().getTime(),


Ога, и забить кэш кучей фуфла.

Автор: DEER 24.12.2009, 14:19
ну ему же надо, чтобы отработал скрипт, а не то, что он возвращает

Автор: dron000 24.12.2009, 15:54
А если чистить то как?

Автор: dron000 23.3.2010, 17:56
А как вернуть после вызова скрипта управление в на ту же страницу или перезапросить ее?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)