我正在研究使用ajax请求和会话变量更新进度的进度条。当我的程序执行耗时的操作时,比如发送很多电子邮件等,它只需设置适当的会话变量(包含进度值)。此操作由以下代码中的函数post()开始。PHP和Ajax进度条
与此同时,第二个函数ask()每500ms循环执行一次。它应该实时返回当前的进度。问题在于:ask()发送的每个请求都在等待post()函数发送的请求完成。有趣的是,如果我设置一些URL,如google.com而不是url/to/progress,它的工作原理很好,除非它不是我想要的:)。这意味着问题出在服务器端。
不确定它是否重要,但我使用Yii Framework。
下面的所有代码只是从头开始(但工作),它的唯一目的是显示我的意思。
在此先感谢。
对不起,我的英文不好:)
查看部分:
<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;
}
你从服务器获得的回应是什么?检查开发工具>网络> xhr请求 – 2012-02-16 14:07:04