JavaScript: Kann man externe Dateien zum Lesen öffnen?

  • Der Betreff sollte ja eigentlich schon sagen, worum es geht... ich versuche z.Zt., einen Chat zu programmieren, der zum Teil über PHP, zum Teil über JavaScript funktioniert. Die jetzige Variante ist noch nicht wirklich optimal, da ein unsichtbares Frame alle paar Sekunden reloaden muss, um dann per JavaScript den Chat zu aktualisieren. Das ist schon bei Weitem besser als wenn der Hauptframe dauernd neu geladen werden müsste aber immer noch nicht das Optimum. Besser wäre es, wenn vom Client aus (also über JavaScript) die Textdatei alle paar Sekunden geöffnet werden würde um dort den Text auszulesen.


    Dazu müsste ich erstens wissen ob und wenn ja wie es möglich ist, eine Datei per JavaScript auszulesen und zweitens bräuchte ich noch einen Befehl, der mal ein paar Sekunden gar nichts tut (hab ja keine DOS-Attacke auf meine eigene Homepage vor :D)


    Damit ihr euch das ganze besser vorstellen könnt: Eine sehr frühe Version findet ihr unter http://www.planetweizen.de/phpBB2/chat -- dabei wird übrigens der Username vom phpBB2 übernommen, d.h. wer nicht bei planetweizen.de angemeldet ist steht als "Anonymous" drin. Wird natürlich auch nicht für immer so bleiben ;)


    Für andere Vorschläge wie ich das Ganze ohne störende Refreshs hinkrieg bin ich natürlich auch dankbar :)

  • Moin,


    meines Wissens nach kann man über JS höchstens Cookies auslesen. Das würde bedeuten, du müsstest in PHP ständig einen neu schreiben, und ihn über JS auslesen. Da würde ich jetzt ansetzen, ob das aber auch wirklich geht - keine Ahnung :)


    Anderer Ansatz: falls man bei PHP die ungepufferte Ausgabe des Webserver abschalten kann, würde ich diesen Weg empfehlen, das würde gar keinen Refresh bedeuten. Die Seite würde quasi nie ausladen. Als nächstes würde dann JS Code generiert, der Dynamisch beim Client die Messages dranhängt. In Perl geschieht das übrigens mit dem Befehlt "$|=1;". Aber wie gesagt, keine Ahnung wie man das in PHP handhabt.


    Cia The-spY


    Edit:


    PS: Grad gefunden, vielleicht auch ein interessanter Ansatz: http://groups.google.com/group…%2Bunbuffered%2Bwebserver


    PPS: der JS Befehl für die Pause: am Besten mit setInterval -> Selfhtml -> JS -> Objektreferent -> wahrscheinlich Window

    I am the lizard king - I can do anything!

  • Beim ersten Ansatz muss ja trotzdem noch neu geladen werden, um die Cookies zu schreiben... der Zweite Ansatz hört sich zumindest logisch an, wird aber wohl daran scheitern, dass für PHP-Scripts eine maximale Ausführungszeit festgelegt wird (i.A. sind das 30 Sekunden)... trotzdem danke!


    Der Refresh stört z.B. im Internet Explorer auch gar nicht so sehr; im Mozilla wird aber durch das anschließend notwendige SetFocus auf das Eingabefeld die Registrierkarte mit dem Chat nach vorne geholt, was nicht wirklich optimal ist, wenn man nebenher noch was anderes machen will ;)

  • Zitat

    Original geschrieben von Weizen
    Beim ersten Ansatz muss ja trotzdem noch neu geladen werden, um die Cookies zu schreiben... der Zweite Ansatz hört sich zumindest logisch an, wird aber wohl daran scheitern, dass für PHP-Scripts eine maximale Ausführungszeit festgelegt wird (i.A. sind das 30 Sekunden)... trotzdem danke!

    Stimmt ja, daran hab ich garnicht gedacht. Die Datei müsste ja auf vom Server geladen werden.


    Ich hab mit der ungepufferten Ausgabe schon ein Skript über ne Stunde für ein Backup laufen lassen, das ging ohne Probleme. Hängt aber wohl auch vom Webserver und dem Provider ab, inwiefern es eingeschränkt ist. Ist das eine allgemeine Vorgabe von PHP mit den 30 Sekunden, oder kommt das von deinem Provider?


    Cia The-spY

    I am the lizard king - I can do anything!

  • Nachtrag:

    Zitat

    Original geschrieben von Weizen
    Der Refresh stört z.B. im Internet Explorer auch gar nicht so sehr; im Mozilla wird aber durch das anschließend notwendige SetFocus auf das Eingabefeld die Registrierkarte mit dem Chat nach vorne geholt, was nicht wirklich optimal ist, wenn man nebenher noch was anderes machen will ;)

    Den Effekt hab ich aber beim IE6 unter XP auch.

    I am the lizard king - I can do anything!

  • Ich weiß gar nicht, wies bei meinem Provider eingestellt ist ;) Ein Limit muss aber angegeben werden und standardmäßig liegt das AFAIR bei 30 Sekunden.


    Werd das aber mal in der Art wie in dem von dir verlinkten Beitrag probieren, mal schauen was nach 30 Sekunden passiert :D Muss ich wohl mal ein Bisschen in der PHP-Doku lesen...


    EDIT: Stimmt, beim IE kommt das Fenster auch in den Vordergrund... komisch, ich hätte schwören können, dass das letztens noch nicht so war :rolleyes: :D


    EDIT²: So, ich lass jetzt ein Testprogramm ne halbe Stunde durchlaufen, wenn dann noch keine Fehlermeldung kam geh ich einfach mal davon aus, dass es funktioniert (setzt flush() den Zeitzähler vielleicht zurück? Ein paar Minuten läufts jedenfalls schon :))

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!