• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

div nachträglich ausblenden

jspit

Lounge-Member
Hi,
ich möchte ein div mit php nachträglich ausblenden, so ein typisches "Bitte warten". Die jetzige Lösung benutzt javascript, ich suche jedoch etwas was ohne javascript funktioniert. Brauche auch keine aufwendigen Ladebalken etc. Um das Problem zu verdeutlichen ein Codeschnipsel:
PHP:
echo "Überschrift";
echo '<div id="bw2">Tabelle wird generiert, Bitte warten...</div>';
flush();
//hier folgt eine längere DB-Abfrage 
 :
//das div mit id="bw2" ausblenden
//hier dann die  Ausgabe
Hab 2 Lösungen, die mir aber nicht so richtig gefallen:
Var.1:
Das div wird absolut positioniert, dann ein zweites div zum Ausblenden drübergesetzt. Man muss mit z-index arbeiten.
Var.2:
Ich gebe im body einen neuen Style mit display:none für die id aus. Das funktioniert, ist aber wohl schlechter Stil was ich so gelesen habe. Sonst würde mir die Variante noch am Besten gefallen.

Bin für Anregungen dankbar.
 
ich glaube wenn du mit flush() arbeitest bekommst du nie eine "saubere Lösung", andere Ideen als die zwei von dir vorgeschlagenen hab ich auch nicht :rolleyes:

Warum magst du die Daten denn nicht via Ajax laden?
 
ich glaube wenn du mit flush() arbeitest bekommst du nie eine "saubere Lösung", andere Ideen als die zwei von dir vorgeschlagenen hab ich auch nicht :rolleyes:

Warum magst du die Daten denn nicht via Ajax laden?

Ajax? Es soll ja ohne javscript funktionieren.
warum ist flush() unsauber? Man muss jedoch noch etwas mehr tun um die div. Caches zu überlisten...
 
Ajax? Es soll ja ohne javscript funktionieren.
warum ist flush() unsauber? Man muss jedoch noch etwas mehr tun um die div. Caches zu überlisten...

ja warum soll es denn ohne JS funktionieren, ist das eine Kundenanforderung?! Die meisten Nutzer haben es ja aktiv... und die die es deaktiviert haben, aktivieren es im Normalfall auch, wenn Sie auf einer Seite sind der Sie vertrauen (mache ich z.B. so). Ich kenne auch keine aktuelle Statistiken, aber ich vermute 98% aller Nutzer haben JS aktiv, gegebenenfalls kann man auf die 2% dann verzichten?!

Weißt du denn wie das mit dem Flush auf Protokollebene genau funktioniert? Würde mich mal interessieren, weil normalerweise sendet man ja zuerst den Header und dann die Daten im ganzem, das flush unterbricht dann wohl die Übertragung und schickt den Rest erst nach wenn alles "fertig" ist?! Aber greift dann nicht auch irgendwann ein timeout im Browser? Deswegen meine ich, dass es nicht ganz sauber ist (vielleicht liege ich damit auch falsch, lasse mich gerne belehren).
 
... gegebenenfalls kann man auf die 2% dann verzichten
Oh je, das könnte wieder was lostreten :)

Deswegen meine ich, dass es nicht ganz sauber ist
Mir fällt spontan auch keine Anwendung ein, in dem flush() sinnvoll wäre bzw. wo man es nicht besser anders lösen sollte. flush() macht für mich nur bei Skripten Sinn, die der User eh nicht zu Gesicht bekommt, sondern dazu dienen dem Entwickler bei zeitintensiveren Funktionen darüber in Kenntnis zu setzen, was das Skript gerade macht bzw. wo es sich befindet.
 
flush funktioniert außerdem nur wenn php NICHT als fcgi läuft, also muss es bei apache z.b. als mod_php laufen.
d.h. wenn die Seite mal zu einem anderen host umzieht wo php anders konfiguriert ist kanns sein dass es plötzlich nicht mehr funktioniert (dann sieht der user nichts bis alles fertig ist und dann ploppt das komplette ding auf einmal auf)
 
Nach meinen Erfahrungen werden viele (neue) Nutzer ungeduldig, wenn nicht so nach 10 Sekunden etwas passiert. Wofür ich dies brauche ist ein Mini-Linux System, das ich weitgehend in der Hand habe. Da einige SQL-Abfragen etwas länger brauchen, hab ich mich für eine solche Ausschrift entschieden. Funktioniert dort sehr gut, d.h. nach abschicken des Anfrageformulars kommt anstelle einer leeren Seite das gewohnte Menü und das 'bitte warten', dann kommt nach mehreren Sekunden das Ergebnis. Nach Umzug auf eine schnellere Maschine erübrigt sich das Ganze dann wohl. Danke an Alle für die Hinweise.
 
Weißt du denn wie das mit dem Flush auf Protokollebene genau funktioniert? Würde mich mal interessieren, weil normalerweise sendet man ja zuerst den Header und dann die Daten im ganzem, das flush unterbricht dann wohl die Übertragung und schickt den Rest erst nach wenn alles "fertig" ist?! Aber greift dann nicht auch irgendwann ein timeout im Browser? Deswegen meine ich, dass es nicht ganz sauber ist (vielleicht liege ich damit auch falsch, lasse mich gerne belehren).
http://en.wikipedia.org/wiki/Chunked_transfer_encoding
 
Zurück
Oben