我想在我的网页的实际内容与标题加载之前显示一条消息,上面写着“正在加载...请等待”。但是在Apache 2.2.15上,如果不首先打印标题,则不会显示任何打印消息。以下是代码: (Perl版本5.14.1,CGI版本:3.52):
use CGI;
use CGI::Carp qw(fatalsToBrowser);
#print "Content-type:text/html\n\n";
print '<pre>'. " This is before header" .'</pre>';
print qq[<DIV id="loading" style="position:absolute; font-family:arial;
font-size:16; left:0px; top:0px; background-color:red; layer-background-
color:white; height:100%; width:100%;">
<TABLE width=100%><TR><TD><B>Loading... Please wait!</B></TD></TR></TABLE>
</DIV>];
my $q = CGI->new;
print $q->header();
print $q->start_html();
warn "this is test header issue script \n";
print "Hello Everybody .. !";
print $q->end_html();
如果我在顶部打印'content-type:text / html',那么我可以显示加载消息,但是也会在顶部打印出我不想要的内容类型。
是否有Perl方法来实现这一目标?
这只是我实际代码的简短示例,因此在打印加载消息后,代码的控制将不再进一步,请忽略它。
答案 0 :(得分:2)
这不是CGI的工作方式。
标题在内容之前。
请参阅RFC3875:
6.2。响应类型
响应包含一个message-header和一个message-body,分开 一个空白行。消息头包含一个或多个标头 领域。正文可能为NULL。
generic-response = 1*header-field NL [ response-body ]
您想要的是客户解决方案:第一个响应返回插页式广告。然后,后续请求加载完成的页面。这些天,这是使用AJAX调用完成的。在过去,我们曾经做过整页重新加载。