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/