gridview yii2 pjax

Yii 2: Pjax+eliminar Gridview no envía una solicitud ajax



yii2 (2)

Estoy usando Pjax con Gridview y quiero que todo mi botón de acción haga ajax. Por defecto, no lo hacen, así que busqué en Google y encontré la manera de eliminar datos-pjax = 0. Pero aún así, no hay solicitudes de Ajax, todas ellas son solicitudes regulares.

Muchas personas tienen este problema y tampoco pude encontrar la solución.

He seguido:

Mi código:

<?php Pjax::begin([''id'' => ''employee-timesheet-grid-id'', ''timeout'' => false, ''enablePushState'' => false, ''clientOptions'' => [''method'' => ''POST'']]) ?> <?= GridView::widget([ ''dataProvider'' => $dataProvider, ''columns'' => [ [''class'' => ''yii/grid/SerialColumn''], [ ''label'' => ''Employee'', ''value'' => function ($model) { return $model->employeePayRate->employeeName; }, ], [ ''class'' => ''yii/grid/ActionColumn'', ''template'' => ''{view} {delete}'', ''buttons'' => [ ''delete'' => function ($url , $model) { return Html::a(''<span class="glyphicon glyphicon-trash"></span>'', $url, [''data-confirm'' => ''Are you sure you want to delete this item?'', ''data-method'' =>''POST''] ); } ], ''urlCreator'' => function ($action, $model, $key, $index) { if ($action === ''view'') { $url = Url::to([''employee-time-sheet/view'', ''id'' => $model->id]); return $url; } else if ($action === ''delete'') { $url = Url::to([''employee-time-sheet/delete'', ''id'' => $model->id]); return $url; } } ], ], ]); ?> <?php Pjax::end(); ?>

¿Alguien ha encontrado la solución para este problema?


Prueba esto. ( mi código de trabajo )

Primero regístrese siguiendo JavaScript en el archivo de vistas de Gridview anterior Aquí estoy usando el cuadro de confirmación de la carpeta de inicio .

$this->registerJs(" $(document).on(''ready pjax:success'', function () { $(''.ajaxDelete'').on(''click'', function (e) { e.preventDefault(); var deleteUrl = $(this).attr(''delete-url''); var pjaxContainer = $(this).attr(''pjax-container''); bootbox.confirm(''Are you sure you want to change status of this item?'', function (result) { if (result) { $.ajax({ url: deleteUrl, type: ''post'', error: function (xhr, status, error) { alert(''There was an error with your request.'' + xhr.responseText); } }).done(function (data) { $.pjax.reload({container: ''#'' + $.trim(pjaxContainer)}); }); } } ); }); }); ");

Y debajo del código para Gridview

<?php /yii/widgets/Pjax::begin([ ''id'' => ''pjax-list'', ]); ?> <?= GridView::widget([ ''dataProvider'' => $dataProvider, ''filterModel'' => $searchModel, ''columns'' => [ [''class'' => ''yii/grid/SerialColumn''], ''stu_category_name'', [ ''class'' => ''yii/grid/ActionColumn'', ''template'' => ''{view} {delete}'', ''buttons'' => [ ''view'' => function ($url, $model) { return ((Yii::$app->user->can("/student/stu/view")) ? Html::a( ''<span class="glyphicon glyphicon-eye-open"></span>'', $url, [''title'' => Yii::t(''app'', ''View''),] ) : ''''); }, ''delete'' => function ($url, $model) { return ((Yii::$app->user->can("/student/stu/delete")) ? Html::a( ''<span class="glyphicon glyphicon-trash"></span>'', false, [ ''class'' => ''ajaxDelete'', ''delete-url'' => $url, ''pjax-container'' => ''pjax-list'', ''title'' => Yii::t(''app'', ''Delete'') ] ) : ''''); } ], ], ], ]); ?> <?php /yii/widgets/Pjax::end(); ?>

Gracias a @skworden por apoyar esta solución. Enlace del foro de Yii para esta solución. haga clic aquí


No configure data-method data-confirm porque Pjax no es compatible.

Después de eliminar ambos, todavía no se trabaja, sí, porque el código de abajo de su controlador no permite que Pjax obtenga la Solicitud.

return [ ''verbs'' => [ ''class'' => VerbFilter::className(), ''actions'' => [ ''delete'' => [''post''], // **remove this** ], ], ];

Tienes que usar el método de publicación Pjax. Aplicar esto en tu Pjax.

''clientOptions'' => [''method'' => ''POST'']

Para Alert Box Necesitas hacer algunas cosas extra

Forma completa de cómo hacerlo

Página 1. Que contienen vista de cuadrícula

<?= GridView::widget([ ''dataProvider'' => $dataProvider, ''filterModel'' => $searchModel, ''layout'' => "{pager}/n{summary}/n{items}/n{pager}", ''columns'' => [ [''class'' => ''yii/grid/CheckboxColumn''], ''_id'', ''title'', ''notification:ntext'', ''date'', [''class'' => ''yii/grid/ActionColumn'', ''template'' => ''{view} {feedback}'', ''buttons'' => [''feedback'' => function ($url, $model, $key) { return Html::a(''<i class="glyphicon glyphicon-comment"></i>''.$model->totalfeedback,''#''); }, ''view'' => function($url,$model,$key){ return $this->render(''_viewLink'',[''model''=>$model]); }, ], ] ], ]); ?>

Página 2. Que Conatin un enlace y Pjax Para cada enlace Ver, Editar, Eliminar

echo Html::a(''<span class="glyphicon glyphicon-eye-open"></span>'',URL::to([''view'',''id''=>$model->_id]),[''id'' => ''view_link'']); Pjax::widget([''id''=>''view_member'', ''linkSelector'' => ''#view_link'',''options''=>[''tag''=>''span'']]); echo ''&nbsp''; echo Html::a(''<span class="glyphicon glyphicon-pencil"></span>'',URL::to([''update'',''id''=>$model->_id]),[''id'' => ''edit_link'']); Pjax::widget([''id''=>''view_member'', ''linkSelector'' => ''#edit_link'',''options''=>[''tag''=>''span'']]); echo ''&nbsp''; echo Html::a(''<span class="glyphicon glyphicon-trash"></span>'', URL::to([''delete'',''id''=>$model->_id]), [''id'' => ''delete_link'']); Pjax::widget([''id''=>''view_member'', ''linkSelector'' => ''#delete_link'', ''options''=>[''tag''=>''span''],''clientOptions'' => [''method'' => ''POST'']]);