Hallo!
Ich habe eine PHP generierte Seite. Wenn man auf einen Button klickt, wird ein Ajax-Request erzeugt.
Code:
<input type="button" value="Skript starten!" onClick="setRequest()"/>
Dieser Ajax-Request ruft eine weitere PHP-Seite auf, mit folgendem Code:
PHP-Code:
$output = shell_exec("/usr/local/bin/shell_skript.sh");
echo "$output";
Es wird also ein Shell Skript aufgerufen welches auf dem Server liegt, (Das Skript benötigt ca 10 Sekunden zum Durchlaufen!) anschließend wird die Ausgabe des Skriptes mittels "echo" ausgegeben.
So... das Problem: Wenn ich nun auf den Button klicke, dann passiert 10 Sekunden lang gar nichts, erst dann erscheint die komplette Ausgabe auf dem Bildschirm.
Wie kann ich es realisieren, dass entweder:
- Die Ausgabe des Skriptes sofort Stück für Stück auf dem Bildschirm erscheint (Also wie wenn man das Skript auf der Konsole eingeben würde. Da erscheint auch Zeile für Zeile und nicht alles auf einmal)
oder
- Dass während das Skript arbeitet eine Sanduhr oder "Bitte Warten" Meldung o.Ä. erscheint, dass der User weiß dass im HIntergrund etwas passiert.
mfg
Hotte
P.S.
Hier der Code der JS-Funktion, welche die PHP Seite mit dem Skript aufruft...
Code:
function setRequest(){
if (window.XMLHttpRequest) {
request = new XMLHttpRequest(); // Mozilla, Safari, Opera
} else if (window.ActiveXObject) {
try {
request = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
} catch (e) {
try {
request = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
} catch (e) {}
}
}
if (!request) {
alert("Kann keine XMLHTTP-Instanz erzeugen");
return false;
} else {
var url = "ajax_sync.php";
request.open('post', url, true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
request.send(null);
request.onreadystatechange = interpretRequest;
}
}
// Request auswerten
function interpretRequest() {
switch (request.readyState) {
case 4:
if (request.status != 200) {
alert("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+request.status);
} else {
var content = request.responseText;
document.getElementById("sync_erg").innerHTML = content;
}
break;
default:
break;
}
}