stef: Refresh einer Seite ohne Serverkommunikation?

hallo,

ich habe foldendes problem. innerhalb einer javascript funktion nöchte ich erst "den einen" und danach einen anderen layer einblenden. quasi einen "Bitte warten ..."-layer.
der pseudocode sieht wie folgt aus :

function xyz()
{
 layer1 einblenden

... jetzt viele tolle sachen für layer2 mit javascript errechnen (dauert ca. 3-5 sekunden !!!)

layer1 ausblenden
 layer2 einblenden
}

das problem ist daß layer1 nicht angezeigt wird. ich vermute, weil der browser noch mit der js-funktion beschäftigt ist, daß der browser die seite in der zeit nicht neuzeichnet und damit layer1 nicht einblendet. denn wenn ich z.b. im debugger an einer stelle vor "layer2 einblenden" stehenbleibe, wird layer1 während der zeit des debuggings auch korrekt angezeigt.

ein location.reload() direkt nach "layer1 einblenden" kommt leider nicht in frage weil keine serverkommunikation stattfinden darf. ferner zeigt firefox bei location.reload() einen dialog an ob die seite ohne post-daten neugeladen werden soll, der dann auch noch mit ja oder nein beantwortet werden muss. das darf natürlich auch nicht sein!
ich suche nach sowas wie document/window.refresh() o.ä.?!

hat jemand einen rat bzw. eine lösung für dieses problem?

vielen dank und gruß
stef

  1. das problem ist daß layer1 nicht angezeigt wird. ich vermute, weil der browser noch mit der js-funktion beschäftigt ist, daß der browser die seite in der zeit nicht neuzeichnet und damit layer1 nicht einblendet.
    hat jemand einen rat bzw. eine lösung für dieses problem?

    anhand deiner beschreibung lässt sich vermuten, dass du document.write zum erzeugen deiner "layer" verwendest?

    1. das problem ist daß layer1 nicht angezeigt wird. ich vermute, weil der browser noch mit der js-funktion beschäftigt ist, daß der browser die seite in der zeit nicht neuzeichnet und damit layer1 nicht einblendet.
      hat jemand einen rat bzw. eine lösung für dieses problem?

      anhand deiner beschreibung lässt sich vermuten, dass du document.write zum erzeugen deiner "layer" verwendest?

      hinter der zeile "layer1 einblenden" verbirgt sich der js-code :
         var dialog = document.getElementById("waitDialog");
         dialog.style.visibility = "visible";
         ... tolle sachen errechnen ...

      der div-layer ist wie folgt in seite implementiert:
         <div id="waitDialog"><p>Bitte warten ...</p></div>
      "waitDialog" ist halt ein stylesheet mit diversen einstellungen (font usw.)

      gruß
      stef

  2. Hi,

    das problem ist daß layer1 nicht angezeigt wird. ich vermute, weil der browser noch mit der js-funktion beschäftigt ist, daß der browser die seite in der zeit nicht neuzeichnet und damit layer1 nicht einblendet.

    Richtig.

    Blende also das Element ein, und rufe dann weitere Funktionalitaet leicht zeitverzoegert ueber setTimeout auf.
    Damit gibt der JS-Interpreter zwischendurch die "Kontrolle" an die Rendering-Engine des Browsers zurueck, so dass diese die Veraenderung auch darstellen kann.

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
    1. ...

      Richtig.

      Blende also das Element ein, und rufe dann weitere Funktionalitaet leicht zeitverzoegert ueber setTimeout auf.
      Damit gibt der JS-Interpreter zwischendurch die "Kontrolle" an die Rendering-Engine des Browsers zurueck, so dass diese die Veraenderung auch darstellen kann.

      MfG ChrisB

      das war die lösung! perfekt! vielen Dank!

      gruß
      stef