Yii2 Pjax 不工作 [英] Yii2 Pjax not working

查看:30
本文介绍了Yii2 Pjax 不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用 Pjax 刷新 gridview,但不知何故它不起作用.代码如下:

_search.php

 registerJs("$('#btnAjaxSearch').click(function(){$.ajax({类型:'获取',数据:$('.bank-search form').serializeArray(),成功:功能(数据){$.pjax.reload({容器:\"#bank\"});},错误:函数(XMLHttpRequest,textStatus,errorThrown){警报('错误');}});返回假;});", \yii\web\View::POS_END, '银行搜索');?><div class="bank-search"><?php Pjax::begin(['id' => 'bank-form']);?><?php $form = ActiveForm::begin(['动作' =>['指数'],'方法' =>'得到',]);?><?= $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']) ?>

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

index.php

 title = '银行';$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(['数据提供者' =>$数据提供者,'过滤器模型' =>$搜索模型,'列' =>[['类' =>'yii\grid\SerialColumn'],'ID','银行名','状态','区','城市',//'分支',['类' =>'yii\grid\ActionColumn'],],]);?><?php Pjax::end();?>

控制器

/*** 列出所有银行型号.* @return 混合*/公共函数 actionIndex(){$searchModel = new BankSearch();$dataProvider = $searchModel->search(Yii::$app->request->queryParams);返回 $this->render('index', ['搜索模型' =>$搜索模型,'数据提供者' =>$数据提供者,]);}

简单搜索有效,但 Pjax 无效.我是 Yii2 的新手,所以任何帮助将不胜感激.谢谢.

解决方案

感谢 Edin.它帮助我解决了这个问题.这是我所做的.它可能会帮助面临同样问题的人.

正如 Edin 提到的,您需要将 url 和搜索参数一起传递给 Pjax 以刷新 gridview.

这是我编辑的代码:

 $js = <<<JS//获取表单id并设置事件$('#bank-form-id').on('beforeSubmit', function(e) {var form = $(this);if(form.find('.has-error').length) {返回假;}$.ajax({网址:form.attr('action'),类型:'帖子',数据:form.serialize(),成功:功能(响应){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]='+地区+'&BankSearch[city]='+city;$.pjax.reload({url: url, container:'#bank'});}});}).on('提交', 函数(e){e.preventDefault();});JS;$this->registerJs($js);

I want to refresh the gridview using Pjax but somehow it is not working. Here is the code:

_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>

Controller

 /**
     * 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,
        ]);
    }

Simple search is working but Pjax is not. I am new to Yii2 so any help would be appreciated. Thank you.

解决方案

Thanks Edin. It helped me to solved the problem. Here is what I did. It might help someone facing the same problem.

As Edin mentioned you need to pass the url along with the search parameters to the Pjax in order to refresh the gridview.

Here's my edited code :

    $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);

这篇关于Yii2 Pjax 不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
其他开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆