我的问题是,我需要一个PHP脚本来在执行的某些点上持续提供输出。我已经使用AJAX来获取html,但它只有在脚本完成后才会返回。这里有一个例子:
<?php
class test {
function test() {
echo '1';
sleep(20);
echo '2'
sleep(5);
}
}
我需要一些方法来让echo在浏览器中实际显示,即使该功能仍在继续。我尝试过使用全局变量和会话变量,但都没有成功。
谢谢你的帮助!
我见过很多人试图做这种事情的问题,但据我所知,只使用PHP和AJAX是不可能做到的。为了只使用AJAX而不是WebSocket或其他方法来实现这一点,您可以在需要提供输出的地方将脚本分解为单独的部分,并将输出作为对单独AJAX请求的响应来提供。这是我的意思的一个基本例子。页面上的脚本可以启动流程,并重复调用以逐步完成流程,直到流程完成。
<button id="begin_process">Start</button>
<script type="text/javascript">
function step(step_number) {
$.get('test.php', {'step_number': step_number}, function(response){
console.log(response.message);
if (response.next_step) {
step(response.next_step);
}
}, 'json');
}
$(document).ready(function(){
$('#begin_process').click(function(){
console.log('go!');
step(1);
});
});
</script>
test.php:
<?php
class Test {
function step($step_number) {
switch ($step_number) {
case 1:
return array('next_step' => 2, 'message' => 'step 1 complete');
case 2:
sleep(20);
return array('next_step' => 3, 'message' => 'step 2 complete');
case 3:
sleep(5);
return array('message' => 'finished');
}
}
}
$test = new Test();
echo json_encode($test->step($_GET['step_number']));