Exebeche
@Exebeche
Осваиваю программирование

Как передать запросы Yii в javascript?

Нашел статью про ListView без листания и с подгрузкой контента по нажатию кнопки.
Ссыльк: www.elisdn.ru/blog/28/beskonechnaia-lenta-zapisei-s-ajax-dozagruzkoi-na-yii
Статья хорошая и понятная, но для первой версии фреймворка.
Начал переделывать и вроде получалось, пока не дошел до javascript
Мой немного переделанный код скрипта выглядит так:
// запоминаем текущую страницу и их максимальное количество
    var page = parseInt('<?php echo Yii::$app->request->get("page", 1); ?>');
    console.log(page);
    var pageCount = parseInt('<?php echo (int)$dataProvider->pagination->pageCount; ?>');

    var loadingFlag = false;

    $('#showMore').click(function()
    {
        // защита от повторных нажатий
        if (!loadingFlag)
        {
            // выставляем блокировку
            loadingFlag = true;

            // отображаем анимацию загрузки
            $('#loading').show();

            $.ajax({
                type: 'get',
                url: window.location.href,
                data: {
                    // передаём номер нужной страницы методом POST
                    'page': page + 1,
                    '<?php echo Yii::$app->request->csrfTokenFromHeader ?>': '<?php echo Yii::$app->request->csrfToken ?>'
                },
                success: function(data)
                {
                    // увеличиваем номер текущей страницы и снимаем блокировку
                    page++;
                    loadingFlag = false;

                    // прячем анимацию загрузки
                    $('#loading').hide();

                    // вставляем полученные записи после имеющихся в наш блок
                    $('#listView').append(data);

                    // если достигли максимальной страницы, то прячем кнопку
                    if (page >= pageCount)
                        $('#showMore').hide();
                }
            });
        }
        return false;
    });

Но ни один php echo не возвращает желаемого, если вызвать в javascript, но отлично отображаются в пхп.

В javaScript я еще хуже чем в php, но довел скрипт до того, что он начал реагировать на клик, а вот данные получить никак не осилю.

Пожалуйста подскажите как это победить и как правильно получить эти echo?

На всякий привожу остальной код данного решения, который у меня получился:
Модель:
public function getNewDataProvider()
    {
        $query = Product::find()->where(['new' => 1]);
        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'pagination' => [
                'pageSize' => 2,
            ],
        ]);
        return $dataProvider;
    }


Контроллер:
public function actionNew()
    {
        $dataProvider = Product::getNewDataProvider();

        if (\Yii::$app->request->isPjax){
            return $this->renderPartial('_loop', [
                'dataProvider' => $dataProvider,
            ]);
        } else {
            return $this->render('new', [
                'dataProvider' => $dataProvider
            ]);
        }
    }


Вид index:
<?php Pjax::begin([
    'id' => 'productList',
    'enablePushState' => false,
//    'enableReplaceState' => false,
]); ?>

<?= $this->render('_loop', ['dataProvider' => $dataProvider]); ?>

<?php Pjax::end(); ?>


Вспмогалка _loop:
<?= ListView::widget([
    'dataProvider' => $dataProvider,
    'itemView' => '_view',
    'layout' => "{items}\n{summary}",
]); ?>

<?php if ($dataProvider->totalCount > $dataProvider->pagination->pageSize): ?>


    <p id="loading" style="display:none"><img src="<?php echo Yii::$app->request->baseUrl; ?>/images/loading.gif" alt="" /></p>
    <p id="showMore">Показать ещё</p>

<?php endif; ?>


Вспомогалка _view:
<h2><?= Html::encode($model->title) ?></h2>
    <?= HtmlPurifier::process($model->description) ?>
  • Вопрос задан
  • 118 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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