@DronTat

Как обновить 2 pjax объекта одним запросом?

Имею две грид таблицы в одной странице, каждый обернут в свой PJAX со своим id. Нужно что бы было автообновление каждые n секунд. Но не могу добиться правильной работы
<?php Pjax::begin([
                'id' => 'select_pjax'
            ])?>
            <?= GridView::widget([
                'dataProvider' => $dataProviderTemp,
                'columns' => [
                    ......]])
<?php
            $this->registerJs(
                '$("document").ready(function(){
                            setTimeout(function(){
                                $.pjax.reload({container:"#select_pjax"});  //Reload GridView
                            },5000);
                    });'
            );?>
<?php Pjax::end()?>
код всякий разный
<?php Pjax::begin([
                'id' => 'save_pjax'
            ])?>
            <?= GridView::widget([
                'dataProvider' => $dataProviderTemp,
                'columns' => [
                    ......]])
<?php
            $this->registerJs(
                '$("document").ready(function(){
                            setTimeout(function(){
                              $.pjax.reload("#save_pjax");  //Reload GridView
                            },4000);
                    });'
            );?>
<?php Pjax::end()?>

В определенный момент происходит перекрытие и отрабатывает только один запрос. Как сделать, что бы оба обновлялись?
  • Вопрос задан
  • 1914 просмотров
Решения вопроса 1
morflot
@morflot
Frontend Developer
асинхронyо их нужно выполнять
$.pjax.reload({ container: #id, async:false });
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
https://github.com/yiisoft/jquery-pjax

Вызывайте в js обновление контейнеров по их id, например:
$.pjax.reload('#pjax-container', options);
$.pjax.reload('#pjax-container2', options);

Можно зацепиться за событие первого контейнера и обновлять второй.
Ответ написан
sokollondon
@sokollondon
Вариант 1. Использовать обычный ajax
$.ajax({
    'success': function(data){
        var targets = [
            '#container1',
            '#container2'
        ];
        $.each(targets, function (ind, t) {
            $(t).html($(data).find(t).html());
        });
    }
});


Вариант 2. Использовать pjax, но будет 2 запроса
$.pjax.reload({container: "#container1", async:false});
$.pjax.reload({container: "#container2", async:false});

P.S. К разработчикам Pjax обращаются с 2012г с просьбой сделать 1 запросом, делать не планируют
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы