WernerK: "Bitte warten" währen Ladevorgang

Hallo,
In einer PHP Seite gibt es einen Button. Wenn man drauf klickt wird über
exec("makeJPG.bat"); eine Exe Datei aufgerufen die einen Rendering und Umwandlungsprozess macht. Dieser Vorgang dauert bei größeren Dateien etwas. Man sieht im Browser oben im Tab
nur die Sanduhr, so als ob eine Seite ewig braucht zum laden.

Ich würde gerne dem Anwender eine Animation zeigen (Sanduhr) bis der Renderprozess fertig ist.
Alle Versuche bisher schlugen fehl, weil einfach während dem Prozess wo die Seite beschäftigt ist nichts angezeigt wird.
Ich habe versucht das beim Klick auf den Button eine Animation angezeigt wird.

if(isset($_POST['showJPG'])){
?>

<div id="PleaseWait">
<br /><br /><br />
<img src="../img/pleasewait.gif" />
<br />  <br />
  Bitte warten.... / Please wait.....
</div>
..

Die wird aber nicht sofort angezeigt, sondern erst später wenn die Seite fertig geladen ist, was ja keinen Sinn macht.

vielleicht hat jemand einen anderen ANsatz oder solch ein Problem wurde hier schon mal besprochen?

Gruss
Werner

  1. Moin,

    In einer PHP Seite gibt es einen Button. Wenn man drauf klickt wird über
    exec("makeJPG.bat"); eine Exe Datei aufgerufen die einen Rendering und Umwandlungsprozess macht. Dieser Vorgang dauert bei größeren Dateien etwas. Man sieht im Browser oben im Tab
    nur die Sanduhr, so als ob eine Seite ewig braucht zum laden.

    Das ist auch korrekt, weil es so ist: Der Browser fordert eine neue Seite an und der Server führt das PHP-Skript aus (welches wiederum eine Batch-Datei ausführt) und erst, wenn alles fertig ist, sendet er die neue Seite zum Client.

    Ich würde gerne dem Anwender eine Animation zeigen (Sanduhr) bis der Renderprozess fertig ist.

    Das ließe sich über ein Javascript lösen, welches einen AJAX-Request sendet und - während es auf eine Antwort wartet - ein Ladekringel anzeigt.

    Ich habe versucht das beim Klick auf den Button eine Animation angezeigt wird.
    [...]
    Die wird aber nicht sofort angezeigt, sondern erst später wenn die Seite fertig geladen ist, was ja keinen Sinn macht.

    Für dich macht es keinen Sinn - technisch ist es logisch.

    Grüße Marco

    --
    Ich spreche Spaghetticode - fließend.
    1. Tach!

      und erst, wenn alles fertig ist, sendet er die neue Seite zum Client.

      Auch als Antwort zu EKKi, so absolut ist das nicht. Ein PHP-Script schickt seine Ausgabe ständig zum Webserver (zumindest im PHP-als-Modul-Betrieb). Man kann von PHP aus mit flush() den Webserver bitten (nicht zwingen), seinen Puffer direkt an den Client zu senden, auch wenn er noch nicht voll ist. Hat man eine lange Ausgabe schickt also der Webserver üblicherweise von sich aus immer mal wieder was raus. Allerdings kann nun auch noch der Browser denken, dass er so wenig Zeug jetzt noch nicht rendern mag und lieber noch ein paar Bytes abwartet.

      Letzlich bleibt die flush()-Methode reichlich unsicher, selbst wenn der Webserver mitspielt. Große Websites schicken deswegen lieber mal eine leere statische Rahmenseite und holen dann mit Ajax die eigentlichen Inhalte rein, wenn der datenliefernde Server endlich alles zusammengetragen hat. Am Ende ist das für den Anwender aber immer noch ein reichlich unbefriedigender Zustand. Da baut sich vor ihm eine Seite auf, jedoch die eigentlichen Inhalte kommen quälend langsam nachgereicht. Da können sich die Webentwickler dreimal auf die Schulter klopfen, was für einen tollen Warte-Animations-Mechanismus sie da verzapft haben.

      dedlfix.

      1. Moin,

        Auch als Antwort zu EKKi, so absolut ist das nicht.

        Aber üblich.

        Letzlich bleibt die flush()-Methode reichlich unsicher, selbst wenn der Webserver mitspielt.

        Daher ist es wohl auch ein günstiger in dem Fall mit Ajax zu arbeiten.

        Am Ende ist das für den Anwender aber immer noch ein reichlich unbefriedigender Zustand. Da baut sich vor ihm eine Seite auf, jedoch die eigentlichen Inhalte kommen quälend langsam nachgereicht.

        Das kommt ganz darauf an. Wenn es nun mal eine sehr datenlastige Seite ist, ist es für Otto Normal sicher besser, er sieht "Bitte warten", als dass er nichts sieht. Die meisten User sind verunsichert, wenn sie "nichts" sehen, und fragen sich, "ob der noch was macht".

        Da können sich die Webentwickler dreimal auf die Schulter klopfen, was für einen tollen Warte-Animations-Mechanismus sie da verzapft haben.

        Für viele Anwendungsfälle ist ein Nachladen von Inhalten per AJAX sicher nicht nötig oder sogar störend; in vielen anderen Fällen ist es jedoch sehr vorteilhaft.

        Grüße Marco

        --
        Ich spreche Spaghetticode - fließend.
  2. Mahlzeit WernerK,

    Ich würde gerne dem Anwender eine Animation zeigen (Sanduhr) bis der Renderprozess fertig ist.
    [...]
    Die wird aber nicht sofort angezeigt, sondern erst später wenn die Seite fertig geladen ist, was ja keinen Sinn macht.

    ... was aber logisch ist, da das PHP-Skript erst dann fertig ist und sein Ergebnis an den Browser sendet.

    vielleicht hat jemand einen anderen ANsatz oder solch ein Problem wurde hier schon mal besprochen?

    Integriere in die Seite, auf der sich der Button befindet, ein verstecktes Bild. Beim Klick auf den Button aktiviere dieses Bild (Client-seitig!) - ggf. kannst Du auch noch ein Irgendwas über die gesamte Seite legen, um sie "abzudunkeln".

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:& n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  3. Hallo

    ich habe es jetzt doch hinbekommen mit der Animation.
    Das Problem war ursprünglich die falsche Stelle auf der Seite.
    Wenn das Bild (Sanduhr) direkt nach dem body Tag platziert wird, erscheint es sofort
    und wenn der Ladevorgang fertig ist, blende ich es wieder per JS aus

    Danke trotzdem

    Gruss
    Werner

    1. Hi,

      mit jquerymobil gibts auch eine schöne möglichkeit
      kuckst du
      Viele Grüße aus LA

      --
      ralphi