私はプログレスバーに進み、ajaxリクエストとセッション変数を使って進行状況を更新しています。私のプログラムが多くの電子メールの送信など、時間のかかる操作を実行するときには、適切なセッション変数(進捗値を含む)を設定するだけです。この操作は、以下のコードで関数post()によって開始されます。PHPとAjaxを使ったプログレスバー
一方、2番目の関数ask()は500msごとにループで実行されます。現在の進行状況をリアルタイムで返します。そしてここに問題があります:ask()によって送られたすべてのリクエストは、post()関数が終了したリクエストを待っています。面白いのは、url/to/progressの代わりにgoogle.comのようなURLを設定した場合、それは私が望むものではないという点を除いてうまく動作するということです。つまり、その問題はサーバー側にあります。
重要なのかどうかわかりませんが、私は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;
}
あなたのサーバーからの応答は何ですか? dev tools> network> xhr requestsを確認してください –