Yii2:使用带分页的 Pjax POST 方法在 Gridview 中搜索

2022-01-07 00:00:00 php yii2 gridview pjax

我是 yii2 & 的初学者尝试在搜索按钮上使用 Pjax 在 Gridview 中搜索字段.我已使用 GET 方法完成此操作,但我想使用 POST 方法完成此操作.那么我如何使用带有分页的 Yii2 Pjax(post 方法)来做到这一点?

这是我的代码:

_details.php:

registerJs($js);?><div class="col-lg-5"><?phpPjax::begin(['id' => 'bank-form']);$form = ActiveForm::begin(['id' =>'bank-details-form','方法' =>'邮政',]);如果($_REQUEST['bank_name']){$searchModel->bank_name = $selected;}//银行级别 1echo $form->field($searchModel, 'bank_name')->widget(DepDrop::classname(), ['数据' =>$银行名称,'选项' =>['占位符' =>'选择银行'],'类型' =>DepDrop::TYPE_SELECT2,'select2Options' =>['pluginOptions'=>['allowClear'=>true]],'插件选项' =>['取决于' =>[''],'网址' =>Url::to(['/students/child-account']),]]);//状态级别 2echo $form->field($searchModel, 'state')->widget(DepDrop::classname(), ['类型' =>DepDrop::TYPE_SELECT2,'数据' =>$bankState,'选项' =>['占位符'='选择状态'],'select2Options' =>['pluginOptions'=>['allowClear'=>true]],'插件选项' =>['取决于' =>['bankdetails-bank_name'],'网址' =>Url::to(['/students/child-account']),'loadingText' =>'选择银行',]]);//区域级别 3echo $form->field($searchModel, 'district')->widget(DepDrop::classname(), ['数据' =>$bankState,'选项' =>['占位符' =>'选择地区'],'类型' =>DepDrop::TYPE_SELECT2,'select2Options' =>['pluginOptions'=>['allowClear'=>true]],'插件选项' =>['取决于' =>['bankdetails-state'],'网址' =>Url::to(['/students/auto-populate-districts']),'loadingText' =>'选择地区',]]);//城市等级 4echo $form->field($searchModel, 'city')->widget(DepDrop::classname(), ['数据' =>$bankCity,'选项' =>['占位符' =>'选择城市'],'类型' =>DepDrop::TYPE_SELECT2,'select2Options' =>['pluginOptions'=>['allowClear'=>true]],'插件选项' =>['取决于' =>['bankdetails-区'],'网址' =>Url::to(['/students/auto-populate-cities']),'loadingText' =>'选择城市',]]);?><div class="form-group"><br/><?= Html::submitButton('Search', ['class' =>'btn btn-success']) ?>

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

解决方案

尝试使用Pjax的post方法:

$.pjax.reload({url: url, method: 'POST', container:'#bank-grid'});

I am beginner to yii2 & trying to search fields in Gridview using Pjax on search button. I have done this with GET method but I want to do this by using POST method. Then how can I do this with Yii2 Pjax(post method) with pagination?

Here is my code :

_details.php:

<?php          

    use yiihelpersHtml;                             
    use yiiwidgetsActiveForm;         
    use yiiwidgetsPjax;  
    use kartikdepdropDepDrop; 


    $js = <<<JS                       
           // get the form id and set the event                         
           $('#bank-details-form').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 txtValue = $("#bankdetails-bank_name").val();   
                    if(txtValue == "")  
                    {  
                        alert("Please select bank name");  
                        return false;  
                    }   

                    var bank_name = $('#bankdetails-bank_name option:selected').text();     
                    var state     = $('#bankdetails-state option:selected').text();     
                    var district  = $('#bankdetails-district option:selected').text();      
                    var city      = $('#bankdetails-city option:selected').text();           
                    var url       = form.attr('action')+ '&BankDetails[bank_name]='+bank_name+'&BankDetails[state]='+state+'&BankDetails[district]='+district+'&BankDetails[city]='+city;         

                    $.pjax.reload({url: url, container:'#bank-grid'});        
                }       
            });                                          
        }).on('submit', function(e){                              
                e.preventDefault();                         
        });

        JS;
        this->registerJs($js); ?>

        <div class="col-lg-5">                                            

        <?php                                  

            Pjax::begin(['id' => 'bank-form']);                          
            $form = ActiveForm::begin(['id'  => 'bank-details-form',           
                                    'method' => 'post',  
                                    ]);         

            if($_REQUEST['bank_name'])
            {
                $searchModel->bank_name = $selected;
            }

            // Bank level 1
            echo $form->field($searchModel, 'bank_name')->widget(DepDrop::classname(), [
            'data'    => $bankName,
            'options' => ['placeholder' => 'Select Bank'],
            'type'    => DepDrop::TYPE_SELECT2,

            'select2Options'  => ['pluginOptions'=>['allowClear'=>true]],
            'pluginOptions'   => [
                'depends'     => [''],
                'url'         => Url::to(['/students/child-account']),
                ]
            ]);

            // State level 2
            echo $form->field($searchModel, 'state')->widget(DepDrop::classname(), [
            'type'    => DepDrop::TYPE_SELECT2,
            'data'    => $bankState,
            'options' => ['placeholder'=>'Select State'],

            'select2Options'  => ['pluginOptions'=>['allowClear'=>true]],
            'pluginOptions'   => [
                'depends'     => ['bankdetails-bank_name'],
                'url'         => Url::to(['/students/child-account']),
                'loadingText' => 'Select Bank',
            ]
            ]);

            // District level 3
            echo $form->field($searchModel, 'district')->widget(DepDrop::classname(), [
            'data'    => $bankState,
            'options' => ['placeholder' => 'Select District'],
            'type'    => DepDrop::TYPE_SELECT2,

            'select2Options'  => ['pluginOptions'=>['allowClear'=>true]],
            'pluginOptions'   => [
                'depends'     => ['bankdetails-state'],
                'url'         => Url::to(['/students/auto-populate-districts']),
                'loadingText' => 'Select District',
            ]
            ]);

            // City level 4
            echo $form->field($searchModel, 'city')->widget(DepDrop::classname(), [
            'data'    => $bankCity,
            'options' => ['placeholder' => 'Select City'],
            'type'    => DepDrop::TYPE_SELECT2,

            'select2Options'  => ['pluginOptions'=>['allowClear'=>true]],
            'pluginOptions'   => [
                'depends'     => ['bankdetails-district'],
                'url'         => Url::to(['/students/auto-populate-cities']),
                'loadingText' => 'Select City',
            ]
            ]);

        ?>

        <div class="form-group"><br/>
            <?= Html::submitButton('Search', ['class' => 'btn btn-success']) ?>
        </div>

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

    </div>

解决方案

Try using post method of Pjax:

$.pjax.reload({url: url, method: 'POST', container:'#bank-grid'}); 

相关文章