| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > Perl и Ajax |
| Автор: Marlik 28.5.2011, 19:29 | ||
Всем привет, есть образец CGI::Ajax модуля:
Как можно в функции Show_HTML получить параметры из perl_func? Может где можно почитать, на русском желательно. Или есть альтернатива? Спасибо. |
| Автор: Pfailed 28.5.2011, 20:06 |
| По вашему при выполнении perl_func выполняется Show_HTML? Я не использовал этот модуль, но по логике вещей, она не выполняется. Как я понимаю Show_HTML выполняется при генерации страницы, а perl_func при ответе на ajax запрос. А значит и получать параметры из perl_func бессмысленно. |
| Автор: Marlik 28.5.2011, 21:00 |
| Я просто не очень знаком с этим модулем, поэтому и заинтересовался, http://search.cpan.org/~bpederse/CGI-Ajax-0.707/lib/CGI/Ajax.pm, я в английском не очень силен, а русский перевод оставляет желать лучшего. Как будто автор просто переводил текст, и не вникал в это. Может кто на форуме использует CGI::Ajax? Простая задачка, подумал что на CGI::Ajax смогу реализовать. Взять данные из формы, проверить и выдать форму с этим значением в скрытом поле, без перезагрузки страницы. Такое реально? Спасибо. |
| Автор: EcSYZ 28.5.2011, 21:27 |
| Честно говоря, как работает CGI::Ajax не знаю, но более чем уверен, что никакой модуль на перле не сделает то, что нужно делать самостоятельно руками. |
| Автор: Marlik 28.5.2011, 21:42 |
| Да очень просто, на CGI это выглядит так - в текстовое поле воткнул данные и только после перезагрузки всей страницы скрипт проверит данные, сгенерит форму и покажет юзеру. Это не хорошо потому как полей в форме может быть много, еще и капча. А CGI::Ajax может асинхронно проверять данные введенные в каждое поле без перезагрузки страницы. Просто привязываешь определенные функции к каждому полю, для проверки. В принципе просто. Интересует только передача данных из проверяющей функции в функцию которая генерит страничку. Спецов по CGI::Ajax нет? |
| Автор: Marlik 28.5.2011, 22:48 | ||||
Потому что данные взятые из текстового поля будут использованы в новой генеренной форме, для простого CGI, запрос надо отправлять два раза, а требуется один раз. Юзер ввел число и нажал на submit, в это время когда он ввел число и сгенерилась новая страничка со сгенеренной формой где в hidden число введеное юзером. Пример капчи, есть капчи в которых если не разобрал буковок, капчу перезагрузил, а страница не изменилась. Это как образец CGI::Ajax приложения. Добавлено через 1 минуту Может есть другие модули, похожие? |
| Автор: EcSYZ 28.5.2011, 22:53 |
| Я могу подкинуть довольно простую идею на jQuery+AJAX если интересно. |
| Автор: Marlik 28.5.2011, 23:38 |
| Интересно, подкидывай, а то пора уже тему закрывать. |
| Автор: EcSYZ 28.5.2011, 23:55 | ||||
| Вот просто jQuery модуль, позволяющий брать данные из формы и передавать их скрипту без перезагрузки страницы: http://code.google.com/p/docnext/source/browse/branches/square-texture/server/war/js/jquery.iframe-post-form.min.js?r=316 И парой строчек привязываем сабмит формы к этому модулю:
Так что можно возвращать JSON ответ следующего вида:
Так что если в ответе статус будет "ок", то просто берём и заменяем нашу форму на код пришедший в ответе. |
| Автор: Marlik 29.5.2011, 05:14 |
| Спасибо конечно, но как-то это сложно. Я ведь через Ajax передаю запросы в функции Перл они делают всякие различные проверки, на стороне сервера, я конечно не уверен, но мне кажется jQuery работает случайно не на стороне клиента? В принципе, как вариант, если я смогу в функцию Перл получить данные через Ajax запрос, то что мне мешает засунуть данные в БД, а в другой функции достать? Надо поэкспериментировать. |
| Автор: Pfailed 29.5.2011, 08:19 | ||
| Marlik, похоже вы не понимаете принципов работы ajax. Ниже еще 1 пример. На событие onchange происходит проверка, что в поле введена цифра и меньше ли она ста. После проверки рядом с полем выводится соответствующее сообщение. Просто запустите этот пример и станет понятно как оно работает.
|
| Автор: Marlik 29.5.2011, 13:56 |
| Спасибо, за пример. То-же самое только сзади. Вот в том-то и дело что понимаю, так мне надо расширенный вариант Ajax. Вопрос уже не о том как работает Ajax, а как расширить возможности или найти альтернативу. Представьте себе ситуацию, я прошу юзера ввести данные, затем я их проверяю, и если все o key! показываю другую форму и предлагаю нажать кнопку на форме, для отправки данных. Ну так это бред!!! Хочется все делать сразу одним кликом на мышке, а не двумя. Добавлено через 4 минуты и 48 секунд Для большего понимания, мне нужно взять в вашем примере переменную $input после проверки в функции ajax_check_form и передать значение переменной $input в функцию ajaxed_html и там при построении странички использовать значение $input. Спасибо, тему пора закрывать. |
| Автор: EcSYZ 29.5.2011, 14:02 |
| Все JS замуты делаются только руками, и никак уж не перловыми модулями. Так что либо мой наипростейший вариант на jQuery, либо никак вообще |
| Автор: Pfailed 29.5.2011, 14:40 | ||
| Marlik, Предлагаю нормальный вариант. При генерации страницы генерируется сколько нужно форм. Первая делается видимой, остальные нет. Смотрим раздел "Sending Perl Subroutine Output to a Javascript function" в документации CGI::Ajax. Создаем JavaScript функцию через которую будут проходить все ответы ajax_check_form(). В зависимости от прешедших данных она скрывате текущую форму и делает видимой следующую или указывает пользователю на ошибки ввода. Добавлено через 3 минуты и 7 секунд
Поймите, что функция ajaxed_html выполняется только 1 раз, при открытии страницы. В ответах на ajax запросы она никак не участвует. |
| Автор: Marlik 31.5.2011, 08:58 |
| А можно поподробнее? |