Здравствуйте.
Во view в цикле foreach выводится 1 или больше PJax.
Внутри pjax ссылка с классом, который присущ только для этой ссылки.
Идет работа с сессиями. Пытаемся обновлять счетчик времени.
Код Pjax:
<?php Pjax::begin([
'enablePushState' => false,
]); ?>
<?php
$old_date = new DateTime($order['creation_time']);
$old_date->add(new DateInterval('P0Y0M0DT0H30M0S'));
$now_date = new DateTime($actualtime);
$interval = $old_date->diff($now_date, false);
echo "<a href='/cart/gettime?id={$order['game_id']}' class='gettime'>".$interval->format("%I : %S")."</a>";
?>
<?php Pjax::end(); ?>
Код контроллера Gettime:
public function actionGettime() {
$id = Yii::$app->request->get('id');
if(!empty($id)) {
$session = Yii::$app->session;
$session->open();
$order = $session['cart'][$id];
$actualtime = Yii::$app->formatter->asDate('now', 'php:Y-m-d H:i:s');
return $this->renderAjax('gettime', compact('order', 'actualtime'));
} else {
return '0';
}
}
View( gettime ) возвращаемый контроллером соответствует коду в Pjax.
Код скрипта:
$(document).ready(function() {
setInterval(function(){
$('.gettime').each(function() {
$(this).click();
});
}, 1000);
});
Что мы имеем в итоге:
- Все успешно работает, если имеем только одну итерацию в цикле foreach.
- Если итераций больше одной, то обновление Pjax происходит только у последней итерации.
Возможно есть и более элегантные решения, но есть желания понять, почему именно данная конструкция не позволяет производить обновление.
Если заменить JQuery.click() на, к примеру,
var g = $(this).attr('id');
console.log(g);
, то мы получаем нужный нам результат для каждого элемента.
Интервал увеличивал, delay для click() ставил. Все одно. В какой сторону копать?