2016-04-05 7 views
-1

Ich möchte eine Nachricht anzeigen, die gelesen wird "Laden ... Bitte warten", bevor der eigentliche Inhalt meiner Webseite zusammen mit der Kopfzeile geladen wird. Bei Apache 2.2.15 kann jedoch, ohne zuerst den Header zu drucken, keine Drucknachricht angezeigt werden. Unten ist der Code: (Perl-Version 5.14.1, CGI-Version: 3.52):So drucken Sie eine Seite laden Nachricht vor der Kopfzeile mit CGI Perl

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(); 

Wenn ich 'Content-Type: text/html' drucke an der Spitze, dann das Laden zu zeigen, ich bin in der Lage Nachricht, aber das druckt auch den Inhaltstyp an der Spitze, die ich nicht will.
Gibt es einen Perl-Weg, um dies zu erreichen?
Dies ist nur ein kurzes und vereinfachtes Beispiel meines tatsächlichen Codes. Nach dem Drucken der Lademeldung wird die Steuerung des Codes nicht weiter fortgesetzt. Bitte ignorieren Sie dies.

Antwort

2

So funktioniert CGI nicht.

Der Header geht vor Inhalt.

Siehe RFC3875:

6,2. Antworttypen

Die Antwort besteht aus einem Nachrichtenkopf und einem Nachrichtentext, die durch eine Leerzeile getrennt sind . Der Nachrichtenkopf enthält einen oder mehrere Header Felder. Der Körper kann NULL sein.

generic-response = 1*header-field NL [ response-body ] 

Was Sie wollen, erfordert eine Client-Lösung: Die erste Reaktion der interstitiellen zurückgibt. Dann lädt eine nachfolgende Anfrage die fertige Seite. Heutzutage geschieht dies mit AJAX-Anrufen. In den alten Tagen haben wir immer die komplette Seite neu geladen.

Siehe Randal Schwartz's "Watching long processes through CGI".