帮忙看下perl cgi+Ajax+tt不能正确显示

本帖最后由 首天 于 2011-05-25 11:56 编辑

我想将三者结合起来使用,但是没有成功,朋友们帮我看看是哪里出错了,CGI+TT、CGI+Ajax均可以运行,CGI+Ajax+TT没有成功。
代码如下:
1,CGI程序,ia_ajax.pl
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. use CGI;
  5. use CGI::Ajax;
  6. use Template;
  7. binmode STDOUT, ':utf8';

  8. my $tt_config = {
  9.     INCLUDE_PATH => '/home/www/html/ia-template',
  10.     PRE_CHOMP    => 1,
  11.     POST_CHOMP   => 1,
  12.     #INTERPOLATE  => 1,
  13.     EVAL_PERL    => 1,
  14.     START_TAG => quotemeta('<?'),
  15.     END_TAG   => quotemeta('?>'),
  16.     };

  17. my $cgi = CGI->new;
  18. my $pjx = CGI::Ajax->new( 'login' => \&do_login );
  19. my $tt  = Template->new($tt_config) || die "$Template::ERROR\n";
  20. print $pjx->build_html($cgi, \&main_page,{-charset=>'UTF-8', -expires=>'-1d'} );

  21. sub do_login {
  22.     my $input = shift;
  23.     my $output = $input . " was the input!";
  24.     return( $output );
  25. }

  26. sub main_page {
  27.   my $template = "ia_ajax.tt";
  28.   return $tt->process($template, { title =>'AJAX Login'}) or die $tt->error;
  29. }
  30. #
复制代码
2,TT模板,ia_ajax.tt
  1. <html>
  2. <head>
  3. <title><? title ?></title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5. </head>
  6. <body>
  7. <p>Please log in.</p>
  8. <p>Username: <input type="text" name="username" id="username" /></p>
  9. <p>Password: <input type="password" name="passwd" id="passwd" /></p>
  10. <p><input type="submit" name="login" value="login" onClick="login(['username'], ['passwd'], ['authenticated']);"/></p>
  11. </body>
  12. </html>
复制代码
3,浏览器显示:
下载 (13.15 KB)
2011-05-25 11:53


4,服务器错误日志:
下载 (18.49 KB)
2011-05-25 11:54

作者: 首天   发布时间: 2011-05-25

mm?

作者: tmp   发布时间: 2011-05-25

错在了这里:
  1. sub main_page {
  2.   my $template = "ia_ajax.tt";
  3.   return $tt->process($template, { title =>'AJAX Login'}) or die $tt->error;
  4. }
复制代码
应该改成这个的:
  1. sub do_login {
  2.     #my $input = shift;
  3.     my ($username, $password) = @_;
  4.     my $output =  "$username and $password were the input!";
  5.     return( $output );
  6. }

  7. sub main_page {
  8.   my $template = "ia_ajax.tt";
  9.   my $html;
  10.   $tt->process($template, { title =>'AJAX Login'}, \$html) or die $tt->error;
  11.   return $html;
  12. }
复制代码
模板里面还要加个div
  1. <html>
  2.   <head>
  3.     <title><? title ?></title>
  4.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5.   </head>
  6.   <body>
  7.     <p>Please log in.</p>
  8.     <p>Username: <input type="text" name="username" id="username" /></p>
  9.     <p>Password: <input type="password" name="passwd" id="passwd" /></p>
  10.     <p><input type="submit" name="login" value="login" onClick="login(['username', 'passwd'], ['show']);"/></p>

  11.     <div id="show"></div>
  12.   </body>
  13. </html>
复制代码

作者: tmp   发布时间: 2011-05-25

话说看你的日志貌似不是cgi

作者: tmp   发布时间: 2011-05-25