![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Marlik |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 25.2.2007 Где: Рязань Репутация: нет Всего: нет |
Всем привет, есть образец CGI::Ajax модуля:
Как можно в функции Show_HTML получить параметры из perl_func? Может где можно почитать, на русском желательно. Или есть альтернатива? Спасибо. |
|||
|
||||
Pfailed |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 2 Всего: 39 |
По вашему при выполнении perl_func выполняется Show_HTML? Я не использовал этот модуль, но по логике вещей, она не выполняется.
Как я понимаю Show_HTML выполняется при генерации страницы, а perl_func при ответе на ajax запрос. А значит и получать параметры из perl_func бессмысленно. |
|||
|
||||
Marlik |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 25.2.2007 Где: Рязань Репутация: нет Всего: нет |
Я просто не очень знаком с этим модулем, поэтому и заинтересовался, вот ссылка, я в английском не очень силен, а русский перевод оставляет желать лучшего. Как будто автор просто переводил текст, и не вникал в это. Может кто на форуме использует CGI::Ajax?
Простая задачка, подумал что на CGI::Ajax смогу реализовать. Взять данные из формы, проверить и выдать форму с этим значением в скрытом поле, без перезагрузки страницы. Такое реально? Спасибо. |
|||
|
||||
EcSYZ |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 21.6.2007 Репутация: нет Всего: 1 |
Честно говоря, как работает CGI::Ajax не знаю, но более чем уверен, что никакой модуль на перле не сделает то, что нужно делать самостоятельно руками.
|
|||
|
||||
Marlik |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 25.2.2007 Где: Рязань Репутация: нет Всего: нет |
Да очень просто, на CGI это выглядит так - в текстовое поле воткнул данные и только после перезагрузки всей страницы скрипт проверит данные, сгенерит форму и покажет юзеру. Это не хорошо потому как полей в форме может быть много, еще и капча. А CGI::Ajax может асинхронно проверять данные введенные в каждое поле без перезагрузки страницы. Просто привязываешь определенные функции к каждому полю, для проверки. В принципе просто. Интересует только передача данных из проверяющей функции в функцию которая генерит страничку. Спецов по CGI::Ajax нет?
|
|||
|
||||
Pfailed |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 2 Всего: 39 |
Судя по приведённому примеру реально. Добавлено через 3 минуты и 33 секунды
Вам нужен спец по здравому смыслу. Зачем передавать данные из проверяющей функции в функцию которая генерит страничку? |
||||
|
|||||
Marlik |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 25.2.2007 Где: Рязань Репутация: нет Всего: нет |
Потому что данные взятые из текстового поля будут использованы в новой генеренной форме, для простого CGI, запрос надо отправлять два раза, а требуется один раз. Юзер ввел число и нажал на submit, в это время когда он ввел число и сгенерилась новая страничка со сгенеренной формой где в hidden число введеное юзером. Пример капчи, есть капчи в которых если не разобрал буковок, капчу перезагрузил, а страница не изменилась. Это как образец CGI::Ajax приложения. Добавлено через 1 минуту Может есть другие модули, похожие? |
|||
|
||||
EcSYZ |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 21.6.2007 Репутация: нет Всего: 1 |
Я могу подкинуть довольно простую идею на jQuery+AJAX если интересно.
|
|||
|
||||
Marlik |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 25.2.2007 Где: Рязань Репутация: нет Всего: нет |
Интересно, подкидывай, а то пора уже тему закрывать.
|
|||
|
||||
EcSYZ |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 21.6.2007 Репутация: нет Всего: 1 |
Вот просто jQuery модуль, позволяющий брать данные из формы и передавать их скрипту без перезагрузки страницы:
jquery.iframe-post-form.min.js И парой строчек привязываем сабмит формы к этому модулю:
Так что можно возвращать JSON ответ следующего вида:
Так что если в ответе статус будет "ок", то просто берём и заменяем нашу форму на код пришедший в ответе. |
||||
|
|||||
Marlik |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 25.2.2007 Где: Рязань Репутация: нет Всего: нет |
Спасибо конечно, но как-то это сложно. Я ведь через Ajax передаю запросы в функции Перл они делают всякие различные проверки, на стороне сервера, я конечно не уверен, но мне кажется jQuery работает случайно не на стороне клиента?
В принципе, как вариант, если я смогу в функцию Перл получить данные через Ajax запрос, то что мне мешает засунуть данные в БД, а в другой функции достать? Надо поэкспериментировать. |
|||
|
||||
Pfailed |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 2 Всего: 39 |
Marlik, похоже вы не понимаете принципов работы ajax.
Ниже еще 1 пример. На событие onchange происходит проверка, что в поле введена цифра и меньше ли она ста. После проверки рядом с полем выводится соответствующее сообщение. Просто запустите этот пример и станет понятно как оно работает.
|
|||
|
||||
Marlik |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 25.2.2007 Где: Рязань Репутация: нет Всего: нет |
Спасибо, за пример. То-же самое только сзади. Вот в том-то и дело что понимаю, так мне надо расширенный вариант Ajax. Вопрос уже не о том как работает Ajax, а как расширить возможности или найти альтернативу. Представьте себе ситуацию, я прошу юзера ввести данные, затем я их проверяю, и если все o key! показываю другую форму и предлагаю нажать кнопку на форме, для отправки данных. Ну так это бред!!! Хочется все делать сразу одним кликом на мышке, а не двумя.
Добавлено через 4 минуты и 48 секунд Для большего понимания, мне нужно взять в вашем примере переменную $input после проверки в функции ajax_check_form и передать значение переменной $input в функцию ajaxed_html и там при построении странички использовать значение $input. Спасибо, тему пора закрывать. |
|||
|
||||
EcSYZ |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 79 Регистрация: 21.6.2007 Репутация: нет Всего: 1 |
Все JS замуты делаются только руками, и никак уж не перловыми модулями. Так что либо мой наипростейший вариант на jQuery, либо никак вообще
![]() |
|||
|
||||
Pfailed |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 2 Всего: 39 |
Marlik,
![]() Предлагаю нормальный вариант. При генерации страницы генерируется сколько нужно форм. Первая делается видимой, остальные нет. Смотрим раздел "Sending Perl Subroutine Output to a Javascript function" в документации CGI::Ajax. Создаем JavaScript функцию через которую будут проходить все ответы ajax_check_form(). В зависимости от прешедших данных она скрывате текущую форму и делает видимой следующую или указывает пользователю на ошибки ввода. Добавлено через 3 минуты и 7 секунд
Поймите, что функция ajaxed_html выполняется только 1 раз, при открытии страницы. В ответах на ajax запросы она никак не участвует. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl: CGI программирование" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |