perl print":location.." nach print "Content-type:text/html\n\n";
egon
- perl
Hi,
Was will ich: Aufruf einer neuen Seite nach Scriptausführung.
Was tue ich: Ich schreib' den Status der Scriptausführung ins Browserfenster.
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 ?
Dank im voraus
Egon
Hi,
Was tue ich: Ich schreib' den Status der Scriptausführung ins Browserfenster.
argl.
Problem: Wenn ich irgendwann im Verlauf des Script print "Content-type:text/html\n\n"; Text an den Browser sende
...ist der HTTP-Header durch die zwei Umbrüche beendet.
und danach versuche mit z.B. print "Location: www.heise.de\n\n";
RTF RFC 2616. Ein Location-Header erfordert eine absolute URL, keine relative URI innerhalb des selben Servers.
eine neue Seite aufzurufen, schreibt der Browser die Location ins Fenster statt den Javascript-Codes auszuführen.
Was hat ein Redirect mit JavaScript zu tun? Ent- oder weder.
Frage: Was mache ich falsch ? oder Wie mach's richtig ?
perldoc CGI
Cheatah
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
Hallo Egon!
Was tue ich: Ich schreib' den Status der Scriptausführung ins Browserfenster.
Frage: Was mache ich falsch ? oder Wie mach's richtig ?
Du musst dich entscheiden. Entweder du machst einen Redirect mit dem Location: Header, oder du gibst den Status deines Scripts aus.
Wenn du dem Browser Inhalt schicken willst, so kannst du danach eine Weiterleitung nur noch über JavaScript erreichen. (Einfach durch <script> Tags im HTML Quelltext.)
Diese wird aber nicht bie jedem funktionieren, also musst du unbedingt noch einen anklickbaren Verwies (vielleicht auch in einem <noscript> Bereich) dazutun.
Gruß,
Stefan