Bitte Warten Fenster -oder- zweimal senden?

Hallo zusammen,

damit ich es richtig verstehe ...

1) Button auf HTML-Seite startet Script
2) Vollständige (?) HTML-Seite "Bitte Warten" wird mit flush an Browser gegeben - Script läuft unterdessen weiter
3) Script ist fertig und als Abschluss wird header ("Location: danke_bin_fertig.php"); gesendet

Habe ich das so richtig verstanden?

Grüße Finshu
 
Das Problem dabei ist, dass man keinen Header mehr senden kann, wenn bereits eine Ausgabe erfolgte.

Mit Javascript müsstest du einfach beim onload des <body> die Meldung verstecken....

Code:
<!-- Anfang vom HTML -->
<body onload="document.getElementById('msg').style.display='none';">
<span id="msg">Bitte Warten</span>
<?php
flush();
//Das Skript ackert weiter
?>
<!-- restliches HTML -->
 
fatalus hat gesagt.:
Das Problem dabei ist, dass man keinen Header mehr senden kann, wenn bereits eine Ausgabe erfolgte.

Stimmt daran hatte ich nicht gedacht.

Ich hätte da aber noch was gefunden und zwar eine Art Fortschrittsbalken. Die vielleicht
eleganteste Lösung dem User zu sagen wie lange es noch dauert ;-)
Hab's ausprobiert und funktioniert.

Progressbar Klasse für PHP

mfg

Ultra
 
Hallo,

sieht wirklich nicht schlecht aus!

Für mich allerdings nicht zu gebrauchen, denn der Fortschritt wird ja (Wen ich es richtig interpretiere) anhand der gesendeten/ausgegebenen Daten berechnet und Angezeigt! Bei mir tut sich ja erst einmal nicht solange das Script läuft!

Grüße Finshu
 
Du könntest die Verarbeitung des Skriptes ja in einem IFrame verstecken ...

Also ganz oben auf der Seite steht halt "Bitte warten ..."

Und irgendwo versteckt der IFrame.

mfg

Ultra
 
fatalus hat gesagt.:
Das Problem dabei ist, dass man keinen Header mehr senden kann, wenn bereits eine Ausgabe erfolgte.

Mit Javascript müsstest du einfach beim onload des <body> die Meldung verstecken....

Code:
<!-- Anfang vom HTML -->
<body onload="document.getElementById('msg').style.display='none';">
<span id="msg">Bitte Warten</span>
<?php
flush();
//Das Skript ackert weiter
?>
<!-- restliches HTML -->


oder man arbeitet mit ausgabe pufferung,
also am anfang des scriptes ob_start();
und am ende ob_end_flush();
dann kann man jeder zeit nen header ausführen.
 
@nichtsnutz

....wenn man puffert, kann man aber wiederum keine Meldung ausgeben :-)


Ansonsten...

den header brauchst du doch garnicht senden, wenn du keine neue Seite laden willst.

Du kannst die Meldung zum Schluss bspw. per CSS verstecken.
Packe die Meldung in einen Container, den Rest in einen Zweiten.

Beide Container platziere absolute bei 0/0
Dem Container mit dem Rest gebe per CSS eine Hintergrundfarbe.
  • Zuerst gebe die Meldung in dem ersten container aus.
  • dann flush()'e
  • dann lass das Skript seine Arbeit verrichten
  • zum Schluss gebe alles, was du willst, in dem 2. Container aus

....wenn das Skript fertig ist, liegt der 2. Container über dem 1., welcher dadurch nicht mehr zu sehen ist.Fertig:)

Test-Skript
 
Hallo zusammen,

das ist schon einmal ein ganz prima Ansatz! Nur kommt hier das "Bitte Warten" vom Antwortfenster. Kann man es ggf. einbauen, dass die HTML-Seite die den Request absendet sich ändert und die Antwortseit vom Script später dann ganz normal aufgerufen wird?

@nichtsnutz, Mit einer Pufferung kann ich zwar die Ausgabezeit kontrollieren, aber ich kann dennoch nicht zweimal verschiedene HTML-Seiten senden, oder ?

Grüße Finshu
 
Zuletzt bearbeitet:
Wenn du das Formular sendest, ist die Herkunftsseite weg.
Eines geht nur....ein Formular versenden, oder in der Ursprungsseite eine Meldung ausgeben(solange alles in ein und demselben Fenster passieren soll)
 
Zurück