Pjax在Yii2上的gridview搜索上重新加载页面

问题描述 投票:-1回答:2

我正在一个带有ajax请求的页面内加载gridview。然后,在页面加载后,我想让用户订购并像往常一样使用gridview进行搜索,显然不会重新加载页面。

在排序工作时,搜索会重新加载页面(并且由于加载ajax内容的操作与当前页面不同,因此页面完全更改)。我知道Pjax在超时值后重新加载整个页面,但这不是问题,因为我改为非常高的值,我仍然得到重新加载。

此外,这是页面上唯一的pjax。

可能是什么问题呢?

这是使用gridview的视图的代码

    <?php Pjax::begin([
        "id" => "associates-ajax-list",
        "enablePushState" => FALSE,
        "enableReplaceState" => FALSE,
        "timeout" => 5000,
    ]); ?>

    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            'name',
            'surname',

        ],
    ]); ?>
    <?php Pjax::end(); ?>
</div>

这是ajax操作的代码

public function actionAssociatesList($id) {
    $searchModel = new \app\models\AssociateSearch();
    $searchModel->associates_for = $id;
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

    if (Yii::$app->request->isAjax) {
        return $this->renderAjax('associates_list', [
                    'searchModel' => $searchModel,
                    'dataProvider' => $dataProvider,
        ]);
    } else {
        return $this->render('associates_list', [
                    'searchModel' => $searchModel,
                    'dataProvider' => $dataProvider,
        ]);
    }
}

加载此内容的页面是使用Gii生成的标准视图页面

php ajax gridview yii2 pjax
2个回答
0
投票

您可以尝试在视图中添加此脚本吗?

<?php
    $this->registerJs(
       '$("document").ready(function(){ 
            $("#associates-ajax-list").on("pjax:end", function() {
                $.pjax.reload({container:"#associates-ajax-list"});  //Reload GridView
            });
        });'
    );
?>

您可能需要更改一些选择器,因为我不知道HTML在您的项目中的样子。

如果搜索字段位于<form>中,您可能需要一些JS来阻止默认的提交操作。如果没有,表格将在PJAX触发之前提交。


0
投票

问题是gridview。您需要指定一个id。有趣的是,这个gridview是为这个页面生成的唯一一个,所以显然没有冲突。

<?= GridView::widget([
        'id' => "grid-view-name",
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
© www.soinside.com 2019 - 2024. All rights reserved.