Hallo Egon,
Problem: Wenn ich irgendwann im Verlauf des Script print "Content-type:text/html\n\n"; Text an den Browser sende und danach versuche mit z.B. print "Location: www.heise.de\n\n"; eine neue Seite aufzurufen, schreibt der Browser die Location ins Fenster statt den Javascript-Codes auszuführen. Ein vorheriges print "Content-type:text/javascript\n\n"; bringt auch nichts.
Frage: Was mache ich falsch ? oder Wie mach's richtig ?
Uiuiui. Erst einmal: das hat _gar nichts_ mit JavaScript zu tun. Das ist _nur_ HTTP. Eine HTTP-Antwort, die Dein Script erzeugen _muss_, besteht aus zwei Teilen: dem Header und dem Body. Beide Teile werden durch das erste Vorkommnis von \r\n\r\n getrennt. (\n\n wird automatisch vom Apache meistens genauso behandelt, eigentlich stimmt aber nur \r\n bzw. \015\012\015\012) Im Header stehen dan Informationen, was für einen Inhalt die Antwort enthält ("Content-Type") und einiges mehr. (Vieles wird vom Apache automatisch dazuerzeugt) Du darfst auch eine automatische Weiterleitung verwenden, dann musst Du den Location-Header ("Location: absolute-uri") mit absetzen. Das Apache-CGI-Modul sendet, wenn das Script einen Location-Header senden will, einen Status 302 (=Weiterleitung) statt eines Status 200 (=OK,Seite kommt) Du beendest den Header jedoch schon vor der Ausgabe von Location - und das ist falsch. Denn sobald der Apache auf \r\n\r\n (oder auch nur \n\n, wenn er toleranter ist) trifft, meint er, der Header wäre zu Ende, dabei willst Du ja gar nicht, dass der Header zu Ende ist.
Lösung: Schicke _vor_ dem Location-Header _keinen_ Headertrenner - d.h. alle Header, die Du vorher schickst, sollten nur _ein_ Neuezeile-Zeichen am Ende haben. (Also nur \r\n statt \r\n\r\n) Schicke am besten auch gar keinen Content-Type bei einer Weiterleitung - die brauchst Du nicht.
Christian
Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.