我想使用Pjax刷新gridview但不知何故它不起作用.这是代码:
_search.PHP
- <?PHP
- use yii\helpers\Html;
- use yii\widgets\ActiveForm;
- use yii\widgets\Pjax;
- $this->registerJs("
- $('#btnAjaxSearch').click(function(){
- $.ajax({
- type: 'get',data: $('.bank-search form').serializeArray(),success: function (data) {
- $.pjax.reload({container:\"#bank\"});
- },error: function (XMLHttpRequest,textStatus,errorThrown) {
- alert('error');
- }
- });
- return false;
- });
- ",\yii\web\View::POS_END,'bank-search');
- ?>
- <div class="bank-search">
- <?PHP Pjax::begin(['id' => 'bank-form']); ?>
- <?PHP $form = ActiveForm::begin([
- 'action' => ['index'],'method' => 'get',]); ?>
- <?= $form->field($model,'bank_name') ?>
- <?= $form->field($model,'state') ?>
- <?= $form->field($model,'district') ?>
- <?= $form->field($model,'city') ?>
- <div class="form-group">
- <?= Html::Button('Search',['class' => 'btn btn-primary','id' => 'btnAjaxSearch']) ?>
- </div>
- <?PHP ActiveForm::end(); ?>
- <?PHP Pjax::end(); ?>
- </div>
的index.PHP
- <?PHP
- use yii\helpers\Html;
- use yii\grid\GridView;
- use yii\widgets\Pjax;
- $this->title = 'Banks';
- $this->params['breadcrumbs'][] = $this->title;
- ?>
- <div class="bank-index">
- <h1><?= Html::encode($this->title) ?></h1>
- <?PHP echo $this->render('_search',['model' => $searchModel]); ?>
- <p>
- <?= Html::a('Create Bank',['create'],['class' => 'btn btn-success']) ?>
- </p>
- <?PHP Pjax::begin(['id' => 'bank']); ?>
- <?= GridView::widget([
- 'dataProvider' => $dataProvider,'filterModel' => $searchModel,'columns' => [
- ['class' => 'yii\grid\SerialColumn'],'id','bank_name','state','district','city',// 'branch',['class' => 'yii\grid\ActionColumn'],],]); ?>
- <?PHP Pjax::end(); ?>
- </div>
调节器
- /**
- * Lists all Bank models.
- * @return mixed
- */
- public function actionIndex()
- {
- $searchModel = new BankSearch();
- $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
- return $this->render('index',[
- 'searchModel' => $searchModel,'dataProvider' => $dataProvider,]);
- }
简单搜索正在运行,但Pjax不是.我是Yii2的新手,所以任何帮助都将不胜感激.谢谢.
谢谢爱丁.它帮助我解决了这个问题.这就是我做的.它可能会帮助面临同样问题的人.
正如Edin提到的,你需要将url和搜索参数一起传递给Pjax以刷新gridview.
这是我编辑的代码:
- $js = <<<JS
- // get the form id and set the event
- $('#bank-form-id').on('beforeSubmit',function(e) {
- var form = $(this);
- if(form.find('.has-error').length) {
- return false;
- }
- $.ajax({
- url: form.attr('action'),type: 'post',data: form.serialize(),success: function(response) {
- var csrf = yii.getCsrfToken();
- var bank_name = $('#banksearch-bank_name').val();
- var state = $('#banksearch-state').val();
- var district = $('#banksearch-district').val();
- var city = $('#banksearch-city').val();
- var url = form.attr('action')+ '&_csrf='+csrf+'&BankSearch[bank_name]='+bank_name+'&BankSearch[state]='+state+'&BankSearch[district]='+district+'&BankSearch[city]='+city;
- $.pjax.reload({url: url,container:'#bank'});
- }
- });
- }).on('submit',function(e){
- e.preventDefault();
- });
- JS;
- $this->registerJs($js);