Andi: Probleme mit Fortschritsanzeige in Javascript/PHP

Hallo,

ich arbeite an einer Fortschritsanzeige die mir Zeigen soll wie weit mein Script abgearbeitet wurde. Das Script hat eine sehr lange Ausführungszeit da einige Daten in die Datenbank geschrieben werden sollen. Damit Ungeduldige Benutzer nicht immer auf aktualisieren klicken weil vermeindlich nichts vorangeht möchte ich eine Ladeanzeige basteln.

Ich habe mir folgendes Gedacht:

User ruft die Seite auf ohne das was passiert.
Nun wird mit HTTPRequest das Datenbank Script im Hintergrund gestartet. Während das Script läuft speichert es den Fortschritt immer wieder in eine Session Variable. (Z.B. bei jedem Schleifendurchlauf wird die Session Var eins hochgezählt.)

Aus der Hauptdatei die die HTTPRequest Anfrage gestartet hat wir eine 2. Anfrage gesendet die den Wert der Session Variable abfrägt. So müsste ich eigentlich errechnen können wie weit die 1. HTTPRequest ABfrage ist. Doch leider wartet die 2. Abfrage solange bis die erste fertig ist.

Wieso ist dass so? Kann nur eine Anfrage an den Server gesendet werden? Kann man das anders einstellen?

Gibt es noch eine Andere Möglichkeit den Fortschrit zu übertragen?

Grüße, Andi!

  1. ich arbeite an einer Fortschritsanzeige die mir Zeigen soll wie weit mein Script abgearbeitet wurde. Das Script hat eine sehr lange Ausführungszeit da einige Daten in die Datenbank geschrieben werden sollen. Damit Ungeduldige Benutzer nicht immer auf aktualisieren klicken weil vermeindlich nichts vorangeht möchte ich eine Ladeanzeige basteln.

    ich glaube nicht das das geht. Aber warum hat ein Skript eine lange Laufzeit, weil ein paar Daten in eine Datenbank geschrieben wird? Das sollte innerhalb weniger Sekundenbruchteile gehen.

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. ich glaube nicht das das geht. Aber warum hat ein Skript eine lange Laufzeit, weil ein paar Daten in eine Datenbank geschrieben wird? Das sollte innerhalb weniger Sekundenbruchteile gehen.

      Ich finde den Ansatz ziemlich genial, und ich glaube auch, dass das funktionieren kann.
      Dass der eine Aufruf auf den anderen wartet, verstehe ich nicht ganz, immerhin heißt es doch "Asynchronous"JAX?

      Vielleicht musst Du den zweiten Aufruf über ein neues Objekt, dass dann auch anders heißt starten (wenn Du das nicht eh schon tust).

      Benutzt Du irgendeine Bibliothek (Prototype o.ä.)?

      Gruß,

      Andreas

      1. Das Request Object wird für jede Abfrage neu erzeugt. Ich verwende kein Framework.

        Ich habe nun ein wenig herumprobiert. Dabei mal die Scriptzeit mit sleep() für 60 Sek angehalten. Die 2. Anfrage leifert das Ergebnis erst wenn die 1. Anfrage fertig ist.

        Auch wenn ich das Ergebniss in einer Datenbank statt in der Session Variable zwischenspeichere klappts nicht.

        1. Hallo Andi,

          hab grad ein bisschen gegoogelt, und dabei gelernt, dass die meisten Browser wohl nur zwei gleichzeitige Verbindungen zu einem Server zulassen. Das ist vermutlich Dein Problem. Schade eigentlich, die Idee fand ich gut.

          Wie wär's, wenn Du dein Datenbankscript in Stückchen aufrufst und dabei dann immer wieder die Fortschrittsanzeige ein bisschen raufsetzt?

          Ist zwar nicht so schick und dauert einbisschen länger, aber damit sollte es gehen.

          Viele Grüße,

          Andreas

          1. Hallo Andreas,

            ja das kann sein. Danke für deine Mühe.
            Ich habe jetz mein Problem so gelöst wie dur vorgeschlagen hast. Wenn ich das im Hintergrund mache bemerkt der Anwender auch nichts davon. Auf diese Art bekomme ich auch keine Probleme mit dem Time Limit ;-)

            Hätte mein Script funktioniert könnte man auf diese weise auch eine Datei Upload Anzeige gestalten. Die 1. Abfrage lädt die Datei auf den Server, die 2. Abfrage prüft wie groß die Datei auf den Server bereits ist und der Anwender weiß dann wieviel bereits hochgeladen wurde. Mal sehen ob ich hierfür doch eine Lösung finde.

            Schönes Wochenende noch!

    2. Nein es sind nicht ein paar Daten sondern eine ganze Menge. Die Fortschritsanzeige ist für ein Installations Script gedacht. Wäre schön gewesen wenns funktioniert hätte.

      1. hi,

        Nein es sind nicht ein paar Daten sondern eine ganze Menge. Die Fortschritsanzeige ist für ein Installations Script gedacht.

        Ein Installationsscript läuft weder ständig, noch für jeden Seitenbenutzer - sondern idR. genau ein Mal.

        Wenn ich ein Installationsscript anstosse, sollte ich wissen, was ich tue - bspw. in der readme nachgelesen haben, dass das durchaus etwas länger dauern kann.

        Für ein solches Script einen solchen Zusatzaufwand zu betreiben, erscheint mir widersinnig.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Hi,

    Nun wird mit HTTPRequest das Datenbank Script im Hintergrund gestartet. Während das Script läuft speichert es den Fortschritt immer wieder in eine Session Variable. (Z.B. bei jedem Schleifendurchlauf wird die Session Var eins hochgezählt.)

    Wozu so kompliziert? Teile dem User doch einfach den aktuellen Stand mit: Progress-Beispiel (Source)

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!