2015-03-10 15 views
6

Sono principiante a yii2 & cercando di cercare i campi in Gridview utilizzando Pjax sul pulsante di ricerca. Ho fatto questo con il metodo GET ma voglio farlo usando il metodo POST. Quindi come posso farlo con Yii2 Pjax (metodo post) con l'impaginazione?Yii2: Cerca in Gridview utilizzando Pjax Metodo POST con paginazione

Ecco il mio codice:

_details.php:

<?php   

    use yii\helpers\Html;        
    use yii\widgets\ActiveForm;   
    use yii\widgets\Pjax; 
    use kartik\depdrop\DepDrop; 


    $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> 
+0

Ecco alcuni errori di battitura minimi e la rimozione degli spazi non necessari. – peterh

risposta

4

Prova utilizzando il metodo post Pjax:

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

Questo può essere utile a voi

Pjax::begin(['id' => 'container-id', 'timeout' => false, 'enablePushState' => false, 'clientOptions' => ['method' => 'POST']]) 
+2

Ma attenzione, il POST sembra funzionare in modo errato con gridview quando si filtrano alcuni contenuti e c'è più di una pagina. Quindi l'impaginazione non funziona correttamente (i valori prefiltrati vengono persi, poiché la paginazione sembra essere strettamente accoppiata a GET). La soluzione che ha funzionato per me stava ancora utilizzando GET ma senza stato push 'enablePushState' => false – Ekonoval