今天我正在尝试编写我的第一个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 => \¶meterize_info_window) ;
print $ajax->build_html($cgi, \&initialize_html) ;
$ajax->JSDEBUG( 1 ) ;
并返回:“没有头/ html标签,无处插入。无论如何都要返回javascript”
我怎样才能克服这个问题?它的原因是什么?
谢谢
答案 0 :(得分:3)
您的initialize_html
子例程不会发回页面的html。
行print $html . "\n" ;
需要更改为return $html . "\n" ;
。
答案 1 :(得分:1)
我在这里对你的核心问题不是很清楚,但其中一个问题是,当你收到一个由CGI :: Ajax处理的请求时,你应该不发送首先是HTTP标头(例如,Content-Type)。当您print $ajax->build_html(...)
时,它会自动为您处理。通过首先发送您自己的标头,您将CGI :: Ajax的标头移动到响应主体中,它们将无法正常工作。