免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5257 | 回复: 13

帮忙看下perl cgi+Ajax+tt不能正确显示 [复制链接]

论坛徽章:
0
发表于 2011-05-25 11:55 |显示全部楼层
本帖最后由 首天 于 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,浏览器显示:
003.jpg

4,服务器错误日志:
004.jpg

论坛徽章:
0
发表于 2011-05-25 15:56 |显示全部楼层
mm?

论坛徽章:
0
发表于 2011-05-25 16:49 |显示全部楼层
错在了这里:

  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>

复制代码

论坛徽章:
0
发表于 2011-05-25 16:52 |显示全部楼层
话说看你的日志貌似不是cgi

论坛徽章:
0
发表于 2011-05-25 17:43 |显示全部楼层
仙子貌似对这方面很在行。

论坛徽章:
0
发表于 2011-05-25 20:04 |显示全部楼层
错在了这里:应该改成这个的:模板里面还要加个div
tmp 发表于 2011-05-25 16:49

谢谢!
服务器端将perl CGI单独设置了一个运行目录,没有使用默认的cgi_bin
还要请教一下:
服务器端错误日志中的警告信息是什么原因能够帮忙解释下不,谢谢:
001.jpg

论坛徽章:
0
发表于 2011-05-25 20:07 |显示全部楼层
话说看你的日志貌似不是cgi
tmp 发表于 2011-05-25 16:52

服务器端www目录包含perl,cgi_bin,html目录,网站根目录是html,perl CGI目录是perl,其他CGI放在cgi_bin

论坛徽章:
0
发表于 2011-05-25 20:11 |显示全部楼层
仙子貌似对这方面很在行。
2gua 发表于 2011-05-25 17:43


恩,我就是看仙子说现在都用TT,就试用了TT,结果就不想用CGI一点一点来写页面了
用Ajax主要是想实现数据库查询,并返回结果,此过程就不刷新页面了,节省一点服务器资源。
做梦都想得到仙子的指点,只是这类问题对她来说太太没有水准了

论坛徽章:
0
发表于 2011-05-26 08:21 |显示全部楼层
回复 8# 首天


    等她来了会看见的。

论坛徽章:
0
发表于 2011-05-26 08:49 |显示全部楼层
我也在看TT,《Perl Template Toolkit》,才看到第二章。上学不E文没学好,比较难啃。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP