(1)
<?php
/*
* 代码段被命名为long_process.php,这模拟了一个长进程,它有一个for循环,会循环10次,而且在每次循环后会有1秒的睡眠时间。
* 最重要的是,这里我们用了一个session变量$_SESSION[“progress”]存住了进程,另外,不要忘了在每一次循环后要使用session_write_close()函数,
* 因为会话数据通常在的终端关闭后存储,不需要调用session_write_close()函数,但因为会话数据被锁住从而防止同时的写操作。
* 当你还在同时使用框架集的时候,你就会看到因为这种锁特性,框架是一个一个加载的,你可以在所有的session变量完成改变后,
* 终止会话,从而缩短加载框架的总时间。
* */
for($i=1;$i<=10;$i++){
session_start();
$_SESSION["progress"] = $i;
session_write_close();
sleep(1);
}
?>
(2)
<?php
/*
* process.php这个完成起来比较简单,就是在客户端输出进程,这里的progress变量是在long_process.php中被更新的session变量。
* */
session_start();
echo $_SESSION["progress"];
?>
(3)
/*
* 它是进入模拟进程的入口,我省略了剩余的部分。
* 它利用AJAX向服务器发出了两个请求,一个是初始化长进程,另一个是轮询服务器捕获进程,获得进程后,会更新在页面上的显示。
* */
<script type="text/javascript">
//start the long running process
$.ajax({
url: 'long_process.php',
success: function(data){
}
});
//start receiving progress
function getProgress(){
$.ajax({
url: 'process.php',
success: function(data){
$("#progress").html(data);
if(data<10){
getProgress();
}
}
});
}
getProgress();
</script>
<div id="progress"></div>