我正在开发一个进度条,使用ajax请求和会话变量来更新进度。当我的程序执行耗时操作(例如发送多个电子邮件等)时,它只需设置正确的会话变量(其中包含进度值)。此操作由下面代码中的post()函数启动。
同时,第二个函数ask()将在每500毫秒的循环中执行。它应该实时返回当前进度。这里有个问题:由ask()发送的每个请求都在等待post()函数发送的请求完成。有趣的是,如果我将某些URL(如google.com)设置为url/to/progress,它能正常工作,但这不是我想要的 : )。这意味着问题出在服务器端。
不确定是否重要,但我使用Yii框架。
下面的所有代码仅仅是草稿(但可用),其唯一目的是展示我的意思。
提前感谢您。
对于我的糟糕英语表示抱歉 : )
视图部分:
同时,第二个函数ask()将在每500毫秒的循环中执行。它应该实时返回当前进度。这里有个问题:由ask()发送的每个请求都在等待post()函数发送的请求完成。有趣的是,如果我将某些URL(如google.com)设置为url/to/progress,它能正常工作,但这不是我想要的 : )。这意味着问题出在服务器端。
不确定是否重要,但我使用Yii框架。
下面的所有代码仅仅是草稿(但可用),其唯一目的是展示我的意思。
提前感谢您。
对于我的糟糕英语表示抱歉 : )
视图部分:
<script type="text/javascript">
function ask() {
var d = new Date();
var time = d.getTime();
$.ajax({
type: 'get',
url: '/url/to/progress' + '?time=' + time,
success: function(data) {
$("#progress").html(data);
}
})
}
function post() {
var d = new Date();
var time = d.getTime();
$.ajax({
type: 'post',
url: '/url/to/post' + '?time=' + time,
data: {"some": "data"},
success: function(data) {alert(data)}
});
}
$("#test").click(
function() {
post();
var progress = setInterval("ask();", 500);
}
);
</script>
控制器部分:
public function actionPost($time) {
sleep(5); // time consuming operation
echo $time . ' : ' . microtime();
exit;
}
public function actionProgress($time) {
echo $time . ' : ' . microtime();
exit;
}