2015-03-07 10 views
6

काम नहीं कर रहा है मैं Pjax का उपयोग करके ग्रिडव्यू रीफ्रेश करना चाहता हूं लेकिन किसी भी तरह से यह काम नहीं कर रहा है। यहाँ कोड है:Yii2 Pjax

_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 नहीं है। मैं वाईआई 2 के लिए नया हूं इसलिए किसी भी मदद की सराहना की जाएगी। धन्यवाद।

उत्तर

3

धन्यवाद एडिन। इससे मुझे समस्या हल करने में मदद मिली। मैंने जो किया था यह रहा। यह किसी को भी एक ही समस्या का सामना करने में मदद कर सकता है।

जैसा कि एडिन ने बताया है कि आपको ग्रिडव्यू को रीफ्रेश करने के लिए Pjax को खोज पैरामीटर के साथ यूआरएल पास करने की आवश्यकता है।

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

यहाँ मेरी संपादित कोड है

2

जिस तरह से पजाक्स काम कर रहा है वह विशेष शीर्षकों के साथ एक और अनुरोध भेज रहा है। जब pjax अनुरोध का पता लगाया जाता है तो कंटेनर को अपडेट करने के लिए केवल HTML आवश्यक सर्वर से वापस कर दिया जाता है। रेखा

$.pjax.reload({container:\"#bank\"}); 

एक और अनुरोध भेजेगा, और कार्रवाई के अंदर इंडेक्स क्वेरी पैराम खाली हो जाएगा।

आप सत्र में खोज पैरामीटर संग्रहीत करके या क्वेरी स्ट्रिंग में पैरामीटर के साथ pjax url निर्दिष्ट करके इसे हल कर सकते हैं।

निम्न प्रयास करें:

var url = urlWithFilters(); 
    $.pjax({url: url, container: '#bank'}); 

इस मामले तुम सिर्फ फिल्टर के साथ साथ यूआरएल बनाने के लिए, खुद ajax कॉल बनाने के लिए की जरूरत नहीं है में।