Задать вопрос

Yii2 PJax почему страница все равно перезагружается?

Документацию читал, но не помогло. Хотелось бы научиться им пользоваться.
Pjax::begin();
Grid
Pjax::end();

Кнопки создаю так, вот например некоторые из них в ActionColumn:
...
'visible' => function($url, $model) {
	/**
	 * @var \app\components\ActiveRecord $model
	 */
	return GlyphIcon::a('eye-' . ($model->is_visible ? 'open' : 'close'), '',
		['visible', 'id' => $model->id, 'state' => $model->is_visible ? 'off' : 'on'],
		array_merge_recursive([
			'data-pjax' => 'true',
			'data-method' => 'post',
		], $model->is_visible ? [
			'title' => 'Видимый',
			'class' => 'icon-actions-active'
		] : [
			'title' => 'Невидимый',
			'class' => 'icon-actions-inactive'
		])
	);
},
'delete' => function($url, $model) {
	/**
	 * @var \app\components\ActiveRecord $model
	 */
	return GlyphIcon::a('remove-circle text-alert', '',
		['delete', 'id' => $model->id],
		[
			'title' => 'Удалить',
			'data-confirm' => 'Вы действительно хотите удалить эту запись?',
			'data-pjax' => '1',
			'data-method' => 'post',
		]
	);
}
...

Код, который генерирует Yii
jQuery(document).pjax("#w0 a", "#w0", {"push":true,"replace":false,"timeout":1000,"scrollTo":false});
jQuery(document).on('submit', "#w0 form[data-pjax]", function (event) {jQuery.pjax.submit(event, '#w0', {"push":true,"replace":false,"timeout":1000,"scrollTo":false});});


Работает только data-confirm, во всех остальных случаях перезагружает страницу. renderAjax в контроллере тоже не помогает. Что я делаю не так? Благодарен за ответы.
  • Вопрос задан
  • 17181 просмотр
Подписаться 5 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
iliacmd
@iliacmd
Стоит также обратить внимание на то, в каком формате сервер возвращает данные, по умолчанию pjax ждет html для замены. Если сервер возвращает что-то другое (например пустой документ), то страница просто будет перезагружаться.
Ответ написан
Комментировать
@rabadan731
У меня была схожая проблема.
Если ajax запрос шел на другой action, в котором был редирект, Например:
public function actionDelete($id)
    {
        $this->findModel($id)->delete();

        return $this->redirect(['index']);
    }

то страница перегружалась.

Если убрать редирект, все работает как надо.
Ответ написан
Комментировать
@Zohei
нужно указать 'format'=>'raw',
www.yiiframework.com/doc-2.0/yii-grid-datacolumn.h...
[
            'class'=>'yii\grid\DataColumn',
            'attribute'=>'name',
            'format'=>'raw',
            'value'=>function ($model, $key, $index, $column) {
                return a($model->name, ['update','id'=>$model->name], ['data-pjax'=>0]);
            },
            'contentOptions'=>[
                'class'=>'edit-link',
            ],
        ],
Ответ написан
Комментировать
@karminski
Senior React.JS Developer
Pjax'у мешает вот этот аттрибут: 'data-method' => 'post'. Уберите его, и будет всё ок.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы