Pjax 重新加载 Yii2 上的 gridview 搜索页面
Pjax reloads page on gridview search on Yii2
我正在使用 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
$this->registerJs(
'$("document").ready(function(){
$("#associates-ajax-list").on("pjax:end", function() {
$.pjax.reload({container:"#associates-ajax-list"}); //Reload GridView
});
});'
);
?>
您可能需要更改一些选择器,因为我不知道 HTML 在您的项目中是什么样子。
并且如果搜索字段位于 <form>
中,您可能需要一些 JS 来阻止默认提交操作。如果没有,表单将在 PJAX 触发之前提交。
问题出在网格视图上。
您需要指定一个 ID。
有趣的是,这个gridview是为这个页面生成的唯一一个,所以显然没有冲突。
<?= GridView::widget([
'id' => "grid-view-name",
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
我正在使用 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
$this->registerJs(
'$("document").ready(function(){
$("#associates-ajax-list").on("pjax:end", function() {
$.pjax.reload({container:"#associates-ajax-list"}); //Reload GridView
});
});'
);
?>
您可能需要更改一些选择器,因为我不知道 HTML 在您的项目中是什么样子。
并且如果搜索字段位于 <form>
中,您可能需要一些 JS 来阻止默认提交操作。如果没有,表单将在 PJAX 触发之前提交。
问题出在网格视图上。 您需要指定一个 ID。 有趣的是,这个gridview是为这个页面生成的唯一一个,所以显然没有冲突。
<?= GridView::widget([
'id' => "grid-view-name",
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,