Я работаю над индикатором выполнения, который обновляет прогресс с использованием запросов ajax и переменных сеанса. Когда моя программа выполняет трудоемкую операцию, такую как отправка большого количества писем и т. Д., Она просто устанавливает правильную переменную сеанса (которая содержит значение прогресса). Эта операция запускается функцией post () в приведенном ниже коде.
Тем временем вторая функция ask () выполняется в цикле каждые 500 мс. Он должен отображать текущий прогресс в реальном времени. И вот проблема: каждый запрос, отправленный через 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;
}