我尝试使用Ajax
制作搜索表单,当我更改下拉菜单时应设为pjax
,并用div
重新加载页面的特定dataProvider
。
controller.php
public function actionIndex(){
$searchModel = new NewsletterSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
_search.php
<?php $form = ActiveForm::begin([
'id' => 'form1',
'options' => ['data-pjax' => true ],
]); ?>
<?= $form->field($model, 'search_year')->dropDownList(['2018' => '2018', '2019' => '2019'], ['id' => 'yearDrop']) ?>
<?php ActiveForm::end(); ?>
view.php
<?= $this->render('_search', ['model' => $searchModel]); ?>
<?php Pjax::begin(['id' => 'gridData', 'formSelector' => '#form1']) ?>
<?php
foreach ($dataProvider->getModels() as $a){
echo $a->id . '<br/>';
}
?>
<?php Pjax::end(); ?>
<?php
$url = Url::toRoute(['/newsletter/index']);
$script = <<< JS
$('#yearDrop').on('change', function(e) {
e.preventDefault();
let form = $("form");
$.ajax({
url: '$url',
method:'get',
data:form.serialize(),
}).done(function(response){
$.pjax.reload({container: "#gridData"});
}).fail(function(response){
console.log(response);
});
});
JS;
$this->registerJs($script);
?>
当我执行此操作时,什么都没发生,但是在控制台中我有2个xhr request
,但是看起来Pjax
没有重新加载,或者如果重新加载,他失去了GET
参数,因为在第二个{ {1}}成为空参数。