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 '' '';
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 '' '';
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'']]);