Realtime PHP Ausgabe über Ajax in anderer Seite

Folgendes Problem: Auf einer Webseite A soll über einen Button ein PHP Skript B gestartet werden, dass über einen längere Zeit hinweg mit echo z.B. log-Ausgaben ausgibt.
In der Aufrufenden Seite A sollen diese Ausgaben während der Laufzeit des Skriptes B in einen DIV Container mit einer bestimmten Höhe geschrieben werden.

Klingt zunächst einfach, ist es aber nicht ganz.

Folgende Lösung: PHP Ausgabepufferung und Ajax State 3.
Im PHP Skript vor einem echo den Ausgabepuffer starten:

if (ob_get_level() == 0) ob_start();

dann nach jedem echo den Puffer leeren:

echo '...';
flush();

Am Ende des Skripts Puffer beenden:

ob_end_flush();

Nun zu Ajax:
In Jquery den Request rückgeben lassen:

var request = $.ajax({
 ...		
});

dann, weil JQuery nicht mit dem State 3 umgehen kann die Behandlung hierfür selbst vornehmen:

request._onreadystatechange = request.onreadystatechange;
request.onreadystatechange = function() {
	request._onreadystatechange();
	if (request.readyState == 3){
		$(outcontainer).append(request.responseText).delay(50).scrollTop($(outcontainer)[0].scrollHeight);
	} 
};

Zeile 5 bewirkt noch ein kontinuierliches mitscrollen des outputcontainer (muss vorher noch definiert werden).

 

Weitere Möglichkeit:

http://www.sitepoint.com/php-streaming-output-buffering-explained/



Kommentare wurden abgeschlossen.