我正在研究使用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