Perl CGI脚本没有返回内容

时间:2011-04-10 21:20:48

标签: html perl apache cgi

今天我正在尝试编写我的第一个CGI程序。所以我有一个HTML页面,一个JavaScript程序,当我在本地运行时,它们都可以正常工作。 所以,下一步是在Apache服务器上运行它(在MacOSX上本地),第一个例子是“Hello World”也可以正常工作。

问题是当我试图显示“Content-type:text / html”时 我写的是:

#!/usr/bin/perl -wT

use     strict ;
use     warnings ;
use     diagnostics ;
use     CGI ;
use     CGI::Ajax ;

print "Content-type: text/html \n\n";


sub initialize_html 
{
    my  $html   =   <<HTML ;
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"/>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <style type="text/css">
        html    { height: 100% }
        body    { height: 100%; margin: 0px; padding: 0px }
        label   { font-size:9px; text-align:center; color:#222; text-shadow:0 0 5px #fff; font-family:Helvetica, Arial, sans-serif; }
      #map_canvas { height: 100% }
    </style>
    <title>Network Weathermap | hellas online</title>
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
    <script type="text/javascript" src="js/network_weathermap.js"></script>
</head>
<body>
    <div id="map_canvas"></div>
</body>
</html>
HTML
    print $html . "\n" ;
}

#initialize_html() ;
sub parameterize_info_window
{
    return  "CGI \n" ;
}

my $cgi     =   new CGI() ;
my $ajax    =   new CGI::Ajax( describeInfoWindow   =>  \&parameterize_info_window) ;

print   $ajax->build_html($cgi, \&initialize_html) ;
$ajax->JSDEBUG( 1 ) ;

并返回:“没有头/ html标签,无处插入。无论如何都要返回javascript”

我怎样才能克服这个问题?它的原因是什么?

谢谢

2 个答案:

答案 0 :(得分:3)

您的initialize_html子例程不会发回页面的html。

print $html . "\n" ;需要更改为return $html . "\n" ;

答案 1 :(得分:1)

我在这里对你的核心问题不是很清楚,但其中一个问题是,当你收到一个由CGI :: Ajax处理的请求时,你应该发送首先是HTTP标头(例如,Content-Type)。当您print $ajax->build_html(...)时,它会自动为您处理。通过首先发送您自己的标头,您将CGI :: Ajax的标头移动到响应主体中,它们将无法正常工作。