wie macht man eine ladegrafik während php ausgeführt wird?
habe ein problem, ich habe auf einer webseite ein formular, welches nach dem drücken des submit button mit shell_exec serverseitiges php und python ausführt, allerdings bleibt die seite weiß, bis ein ergebnis da ist, welches allerdings ein paar minuten dauert, wie kann man machen dass man nach drücken auf die nächste seite weitergeleitet wird, im unteren bereich dann eine ladeanimation erscheint und dann die rückgabewerte vom server angezeigt werden?
4 Antworten
Du brauchst auf jeden Fall, wie andere schon schrieben JS und AJAX.
Wenn du bei deinem Prozess relativ gut abschätzen kannst wie lange die Ausführung dauert, habe ich auch schon Ladebalken gemacht die, entsprechend der voraussichtlichen Dauer + x durchgelaufen sind. Die Laufzeit kannst du ja auch immer mit messen und dir für den nächsten Aufruf wegspeichern. Sonst kannst du die Aufgabe auch logisch untergliedern und gibst Zwischenstände zurück. Wie früher beim Rechner hochfahren.
z.B.
Datenbank aktualisieren ... abgeschlossen
Bilder komprimieren ... abgeschlossen
usw.
Die Infos kannst du aus deinem PHP Script mit flush() während es Läuft rausgeben.
Die Rückgabe muss dann auch wieder mit JS im Browser empfangen und verarbeitet werden.
Dazu brauchst du Asynchronen Code, am ehesten durch JavaScript (AJAX).
Zunächst musst du einen Ajax Request senden, dann bleibt die Seite stehen und im Hintergrund wird dein Serverscript ausheführt. Während dessen ist die Seite noch aktiv aber du kannst eine Grafik einblenden, ein Animiertes Gif zum Beispiel. Wenn der Server die Antwort sendet führst du eine JavaScript Funktion auf die die neue Seite anzeigt.
Kommt darauf an ob Du einen echten oder gefakten Submitbutton benutzt. Bei einem echten Submitbutton werden die Daten ja per GET oder POST versendet und erst in dem Script, dass die Daten empfängt ausgewertet.
Ich persönlich bevorzuge POST, weil das die Adressleiste nicht so verunstaltet - aber egal.
Du könntest auf der Zielseite ein DIV mit einem Animierten Ladebalken anzeigen - ist aber doof, weil man nie genau weiß wie lange die Seite am laden ist. Aus diesem Grund verwenden viele Programmierer sich drehende Kringel ;-) die auf einer JavaScript-Bibliothek (Canvas) beruhen.
Nach dem die Seite vollständig geladen ist blendest Du den DIV-Container über den Eventhandler "onload" einfach aus.
Wenn Du es richtig gut machen willst beendest Du (um Ressourcen zu sparen) bei der Gelegenheit auch die Animation.
Bei einem gefakten Submitbutton müsstest Du den DIV-Container ebenfalls ein und ausblenden - z.B. in dem Du im Anschluss an die Datenverarbeitung den DIV-Container ausblendest.
Ich bin nicht sicher aber eventuell solltest Du dein Projekt anders strukturieren - vieleicht hilft es wenn Du Teile der neuen Seite in ein Iframe packst, dann wird das außen herum schon mal geladen
ja, das ist eine super idee, das hab ich letztenendes dann auch vor, jetzt ist noch die frage wie ich eine ladegif über ein iframe lege bis die seite geladen hat
ja aber ich habe ein formular, welches nach eingabe auf eine neue seite verweist auf welcher ein befehl mit shell_exec an den server gesendet wird und die seite bleibt dann solange weiß bis der server die vollständige seite geladen hat, was dann mehrere minuten dauern kann, deshalb kann die zielseite nichts anzeigen bis der server mit dem python scrpit fertig ist, was durch php gestartet wurde