Ich möchte den Status eines PHP-Skripts regelmäßig überprüfen und im Browser anzeigen. Hier ist die jQuery, die zum Posten verwendet wird.Fortschritt des von jQuery post aufgerufenen PHP-Skripts
$(document).ready(function() {
$("#tempbut").click(function(event){
$('#loader').show();
$('#mainarea').hide('fast');
$.post(
"template.php",
{
guide : $('#guide').val(),
title : $('#title').val()
},
function(data) {
$('#mainarea').empty();
$('#loader').fadeOut('slow');
$('#mainarea').append(data);
$('#mainarea').show('slow');
}
);
});
});
In dem PHP-Script (nicht veröffentlicht), Echo mir Aussagen wie „Bauanfrage ...“, „Anfrage senden ...“, um den Benutzer über den Fortschritt zu informieren. Wenn ich jQuery-Post nicht verwenden würde, könnte ich nach jedem Echo den Status mit flush() und obflush() anzeigen. Vielleicht liegt es daran, dass der Callback darauf wartet, dass das Skript vollständig ausgeführt wird, bevor es ausgegeben wird?
Gibt es eine Möglichkeit, die vorhandene jQuery .post zu ändern, um dies zu tun? Ich sehe ein paar Beispiele mit .ajax, aber nicht .post.
Wenn .ajax der einzige Weg ist, dies zu tun, wie würde ich diesen Code ändern?
Danke!
BEARBEITEN: Got it running! Hoffentlich wird jemand das hilfreich finden.
test.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>TEST</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge;chrome=1" />
<script src="http://code.jquery.com/jquery-2.1.0.js"></script>
<script>
$.ajax({
url: "test.php",
xhrFields: {
onprogress: function(e) {
console.log(e.target.responseText)
$("body").html(e.target.responseText)
if (e.lengthComputable) {
console.log(e.loaded/e.total * 100 + '%');
}
}
},
success: function(text) {
console.log(text)
$("body").html(text+"<h1>done!</h1>")
}
});
</script>
</head>
<body>
<div id="derp">TEST!</div>
</body>
</html>
test.php
<?php
for($i = 0; $i<20 ; $i++){
sleep(1);
echo $i."</br>";
flush();
ob_flush();
}
?>
Upvote auch für Sie! – MonkeyZeus