Сценарий Perl CGI не возвращает содержимое - PullRequest
0 голосов
/ 11 апреля 2011

сегодня я пытаюсь написать свою первую программу CGI.поэтому у меня есть HTML-страница, программа на JavaScript, которая отлично работает, когда я запускаю их локально.Итак, следующий шаг - запустить его на сервере Apache (локально на MacOSX), и первым примером будет «Hello World», который также отлично работает.

проблема в том, когда я пытаюсь отобразить »Тип содержимого: 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 ) ;

и возвращает:" Нет тегов head / html, некуда вставить. В любом случае, возвращать JavaScript "

преодолеть эту проблему?в чем причина этого?

спасибо

Ответы [ 2 ]

3 голосов
/ 11 апреля 2011

Ваша подпрограмма initialize_html не отправляет обратно html страницы.

Строка print $html . "\n" ; должна быть изменена на return $html . "\n" ;.

1 голос
/ 11 апреля 2011

Я не совсем уверен в вашей основной проблеме, но одна из проблем заключается в том, что когда вы получаете запрос, который будет обрабатываться CGI :: Ajax, вы должны не отправлять HTTPЗаголовки (например, Content-Type) сами в первую очередь.Когда вы print $ajax->build_html(...) это позаботится об этом автоматически для вас.Отправляя сначала собственные заголовки, вы перемещаете заголовки CGI :: Ajax в тело ответа, где они не будут работать правильно.

...