Yii2 Pjax 不工作 [英] Yii2 Pjax not working
问题描述
我想使用 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屋!