Страница 1 из 1

CGI::Ajax && HTML::Template

Добавлено: 2008-09-21 16:45:22
ProFTP
решил поставить Ajax на одну страницу где выводится много данных

но с шаблоном работать не хочет, с CGI просто всё получается, говорят что должно работать с этим шаблоном, и с другими шаблонами, тоже...

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

Код: Выделить всё

#!/usr/bin/perl
# @(#) $Id: ajax.cgi 613 2006-01-24 19:31:08Z dom $
# User registration script.
use strict; use warnings; use CGI; use CGI::Ajax; use CGI::Carp qw(fatalsToBrowser); use HTML::Template;

my $dir="../1/";  my $cgi  = CGI->new();

sub check_username {
    my ( $user ) = @_;
    return unless -f '/tmp/users.txt';
    open my $fh, '<', '/tmp/users.txt'
      or return "open(/tmp/users.txt): $!";
    while (<$fh>) {
        chomp;
        return "Username '$user' taken!" if lc $_ eq lc $user;
    }
    return '';
}

sub save_username {
    my ( $user ) = @_;
    open my $fh, '>>', '/tmp/users.txt'
      or die "open(>>/tmp/users.txt): $!";
    print $fh "$user\n";
    close $fh;
    return;
}

sub main {
     my $template = HTML::Template->new(filename => $dir.'test2.html' ,die_on_bad_params => '0');
               my $url = $cgi ->url(-relative => 1);         
               my $template->param(URL => $url);
    if ( my $user = $cgi->param('user') ) {
        my $err = check_username( $user );
        if ( $err ) {
            $template->param(NOTS => 'nono');
        } else {
            save_username( $user );
            $template->param(NOTS => 'yesyes');
        }
    }
      my $html = $template->output; 
   return $html;   }
my $ajax = CGI::Ajax->new( check_username => \&check_username );
$ajax->JSDEBUG(1);
print $ajax->build_html( $cgi, \&main );
exit 0;
__END__
сейчас возвращает ошибку:

Код: Выделить всё

with			the html-generating function sent to CGI::Ajax
в основном движке, получилось - работалдо, но страницу он полностю обновляет, то есть эффективности нету... должно тлько часть ( с CGI обновляло часть)
короче, как с шаблоном должно быть? ошибка в логике где большая?

JS:
http://www.perl.com/2006/03/02/examples/binding.js
html:

Код: Выделить всё

<html><head>
<title>Signup!</title>
<script type="text/javascript" src="binding.js"></script>
</head><body>
<h1>Signup!</h1>
<TMPL_VAR NAME="NOTS2">
<form action="<TMPL_VAR NAME="URL">" method="post">
<p>Please fill in the details to create a new Account.</p>
<p>Username: <input type="text" name="user" id="user"/>
<em id="baduser"></em></p>
<p>Password: <input type="password" name="pass" id="pass"/></p>
<p><input type="submit" name="submit" value="SIGNUP"/></p>
</form></body></html>
вот полностью рабочий код:

Код: Выделить всё

#!/usr/bin/perl
# @(#) $Id: ajax.cgi 613 2006-01-24 19:31:08Z dom $
# User registration script.
use strict;
use warnings;
use CGI;
use CGI::Ajax;
my $cgi  = CGI->new();
my $ajax = CGI::Ajax->new( check_username => \&check_username );
$ajax->JSDEBUG(1);
print $ajax->build_html( $cgi, \&main );

sub check_username {
	my ( $user ) = @_;
	return unless -f '/tmp/users.txt';
	open my $fh, '<', '/tmp/users.txt'
	  or return "open(/tmp/users.txt): $!";
	while (<$fh>) {
		chomp;
		return "Username '$user' taken!" if lc $_ eq lc $user;
	}
	return '';
}

sub save_username {
	my ( $user ) = @_;
	open my $fh, '>>', '/tmp/users.txt'
	  or die "open(>>/tmp/users.txt): $!";
	print $fh "$user\n";
	close $fh;
	return;
}

sub main {
	my $html = <<HTML;
<html><head>
<title>Signup!</title>
<script type="text/javascript" src="binding.js"></script>
</head><body>
<h1>Signup!</h1>
HTML
	if ( my $user = $cgi->param('user') ) {
		my $err = check_username( $user );
		if ( $err ) {
			$html .= "<p class='problem'>$err</p>";
		} else {
			save_username( $user );
			$html .= "<p>Account <em>$user</em> created!</p>\n";
		}
	}
	my $url = $cgi->url(-relative => 1);
	$html .= <<HTML;
<form action="$url" method="post">
<p>Please fill in the details to create a new Account.</p>
<p>Username: <input type="text" name="user" id="user"/>
<em id="baduser"></em></p>
<p>Password: <input type="password" name="pass" id="pass"/></p>
<p><input type="submit" name="submit" value="SIGNUP"/></p>
</form></body></html>
HTML
	return $html;
}

exit 0;
__END__

в гугле мало что есть, вот такое:
http://www.psicofxp.com/forums/desarrol ... jax-2.html
http://www.mail-archive.com/html-templa ... 02216.html
хочеться добить, или надо другой шаблон?

нашел еще вот это:
http://search.cpan.org/~rhesa/HTML-Temp ... gin/Dot.pm

Re: CGI::Ajax && HTML::Template

Добавлено: 2008-09-22 19:06:27
ProFTP
*лять проблема то вообще не в этом...

короче, как передать из формы в скрипт данные, выполнить в скрипте функцию, и вывести в html над формой 1 или 0, не обновляя страницу и не выводя все данные из СУБД? какой тут нужен JS ? как переделать этот существующий по ссылке который я привел, и как кнопку сделать? :st: :st: :st: :st: :st: :bn: :st: :st: :st: :st: :st: :fool: :-o

Re: CGI::Ajax && HTML::Template

Добавлено: 2008-09-23 7:04:14
zg
http://anton-pribora.ru/files/news.zip когда-то давно настрадал, вобщем там по аяксу была админка сделана, смотри, пхп там ещё не сильно сложный должен быть... :cf:

Re: CGI::Ajax && HTML::Template

Добавлено: 2008-09-23 8:25:22
ProFTP
вот это, если я правильно понял то вместо onChange нужно поствить что-то другие... ONCLICK, как кого составить?

Код: Выделить всё

<A ONCLICK="topic_add(
            document.getElementById('new_topic').value);
            return false;"
   HREF="foo">Add new topic</A>

Код: Выделить всё

<form onsubmit='openSite();return false;'><input name='m' id='m' type='text'/></form>
не могу найти как эту кнопку поставить.... :st:

UPD: короче, кажется понял, но не работает, точнее работает только оно блин один раз выполняется, а больше не хочет, надо посидеть подумать... :fool:

Re: CGI::Ajax && HTML::Template

Добавлено: 2008-09-23 14:41:22
MAK
ProFTP писал(а):вот это, если я правильно понял то вместо onChange нужно поствить что-то другие... ONCLICK
используй что-нить универсальное, например prototypejs.org - кросс-браузерная, отлаженная либа - понятней некуда.
не изобретай велосипед. )

Re: CGI::Ajax && HTML::Template

Добавлено: 2008-09-23 14:52:34
ProFTP
можешь нормально объяснить что за либа? как ее использовать и с чем?

во втором посте я написал, чтобы не повторятся... (оно один раз выполняется по тому JS скрипту http://www.perl.com/2006/03/02/examples/binding.js , надо что-то пересмотреть...)

Re: CGI::Ajax && HTML::Template

Добавлено: 2008-09-23 18:39:38
MAK
Ну там же все написано.
Это js-либа для работы с DOM. Дружит с ajax, json и пр...
Скачиваешь последюю версию, подключаешь в документ

Код: Выделить всё

<script src="prototype.js" type="text/javascript"></script>
и используешь. Тебе надо вроде форму запостить аяксом скрипту, вот кури http://prototypejs.org/api/form/request

Re: CGI::Ajax && HTML::Template

Добавлено: 2008-10-13 7:15:13
ProFTP

Код: Выделить всё

$('person-example').request({
  method: 'get',
  parameters: { interests:'JavaScript', 'hobbies[]':['programming', 'music'] },
  onComplete: function(){ alert('Form data saved!') }
})
1. Cпасибо, посмотрю, но где по вашей сслыке в этом коде функция которая дорлжная запуститься в моем cgi скрипте?
я спросил как переделать 10 строковой скрипт, а вы мне показали либу в 10 000 строк... (не считал но большая)

я так и не сделал, то есть оно выполняется один раз, зато в гугле нашел другие некоторые приколы...
CGI::AJAX уже ставит в какой-то свой код в html, чтобы взаимодействовать сразу с cgi либо с mod_perl

2. а вот элементы AJAX, то есть хотелось бы анамиция при выполнении или выборку (чтобы сразу передвать в скрипт в базу и чтобы страница не обновлялась), где это можно найти? тут нужно что-то не много другое для CGI::AJAX ? не знаю что нужно искать... ну чтобы на страницу накидать больше всякого js
подскжаие что искать и как поставить! надоело парится

Re: CGI::Ajax && HTML::Template

Добавлено: 2008-10-13 10:11:14
ProFTP
вот нашел http://search.cpan.org/~esskar/HTML-Pro ... ototype.pm

но в этой либе есть еще что-то прикольное, кнопки и как анимацию сделать при выполнении?

(загрузка файлов на сервер в процессе на яксе я видел) но тут просто подсчет какой-то выполнить или еще что-то

Re: CGI::Ajax && HTML::Template

Добавлено: 2008-10-13 18:45:28
MAK
ProFTP писал(а): подскжаие что искать и как поставить! надоело парится
Ищите азы веб-программирования. Вы даже вопросы не можете задать грамотно.

Re: CGI::Ajax && HTML::Template

Добавлено: 2008-10-21 17:50:33
ProFTP