Не могу понять каким образом умудряется работать PJAX / AJAX когда он выключен на кнопке удаления в стандартном GridView. Действие контроллера я переписал следующим образом:
public function actionDelete($id, $productId = null)
{
$this->findModel($id)->delete();
list($searchModel, $dataProvider) = $this->prepareDataProvider($productId);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
На $productId можно не обращать внимания, это реализация вложенных ресурсов и одновременно всех ресурсов если в запросе нет параметра, вопрос не в этом.
На странице у меня табулярная форма в обычном гриде, который обернут в Pjax контейнер, ссылка на удаление выглядит как:
<a href="/catalog/1/variation/3/delete" title="Удалить" data-confirm="Вы действительно хотите удалить данную запись?" data-method="post" data-pjax="0"><span class="glyphicon glyphicon-trash"></span></a>
После того как я переписал action контроллера, который, вместо редиректа теперь просто рендерит результат, даже не через renderAjax, а просто render, ссылки на удаление стали работать через ajax.
Нажимаю удалить - выскакивает конфирм, подтверждаю, идет запрос на сервер, а потом просто обновляется грид.
Я изучил yii.js и как он обрабатывает data-method, так там просто создается форма, вставляется в самый низ html документа и триггерится сабмит этой формы. Никаких pjax'ов, более того, запрос к серверу идет без указания pjax контейнера, как в случае с pjax.reload.
Интересный факт:
В параметрах запроса на удаление присутствуют нужные заголовки, но откуда они берутся при такой настройке?
X-PJAX:true
X-PJAX-Container:#variationsListPjax
X-Requested-With:XMLHttpRequest
Объясните пожалуйста, почему? Я то рад что все так просто получилось, но не могу найти откуда корни растут.
P.S. На одной странице у меня несколько pjax контейнеров но ни один из них при объявлении не цепляет все формы, только те что с [data-pjax]