2011-04-10 3 views
0

오늘은 첫 번째 CGI 프로그램을 작성하려고합니다. 그래서 나는 HTML 페이지를 가지고 있는데, 자바 스크립트 프로그램은 로컬에서 실행할 때 잘 동작한다. 그래서 다음 단계는 Apache 서버 (MacOSX에서 로컬)에서 실행하고 첫 번째 예제는 잘 작동하는 "Hello World"가 될 것입니다. 내가 "콘텐츠 유형 : 텍스트/html로"를 표시하려고 할 때콘텐츠를 반환하지 않는 Perl CGI 스크립트

문제가 은 내가 쓴 것은 :

#!/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 태그는 아무데도 삽입 없습니다. 어쨌든 자바 스크립트를 반환 "

어떻게이 문제를 극복 할 수 있습니까? 그것의 원인은 무엇입니까?

+1

"no head/html"을 반환하는 요소는 무엇입니까? 콘솔? 당신의 로그 파일? 어떤 요청을 하시겠습니까? 귀하의 브라우저 주소 표시 줄에있는 URL을 누르거나 자바 스크립트에서 실제 아약스 요청을하고 있습니까? 제발 가르쳐주세요, 내가 perl을 위해 이것을 +1하고 싶습니다 :) –

+0

안녕하세요, 고맙습니다. 브라우저 주소창에 "http : //localhost/cgi-bin/network_weathermap.cgi"을 입력하십시오. – user690182

+0

javascript에는 실제 Ajax 요청이 없으며 "describeInfoWindow"라는 함수가 있으며 "parameterize_info_window"함수를 호출하려고합니다. – user690182

답변

3

귀하의 initialize_html 서브 루틴이 페이지의 HTML을 다시 보내지 않습니다 감사합니다.

print $html . "\n" ; 줄을 return $html . "\n" ;으로 변경해야합니다.

+0

나는 네가 옳았다는 것을 고맙게 생각하지만, 여전히 효과가 없다. – user690182

1

여기 핵심 문제에 대해서는 명확하지 않지만, CGI :: Ajax에서 처리 할 요청을받을 때 이 아닌은 HTTP 헤더를 전송해야합니다. , Content-Type)을 사용하십시오. print $ajax->build_html(...) 때 자동으로 처리됩니다. 자신의 헤더를 먼저 보내면 CGI :: Ajax의 헤더를 응답 본문으로 이동 시켜서 제대로 작동하지 않게됩니다.

관련 문제