pjax.reload обновляет страницу

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
yura1976
Сообщения: 134
Зарегистрирован: 2012.08.06, 13:24

pjax.reload обновляет страницу

Сообщение yura1976 »

Здравствуйте!
Приведу часть кода во вьюхе:

Код: Выделить всё

	<p id="pp" class="btn btn-primary">Выбрать</p>
   	<?php Pjax::begin(['id' => 'pj0']); ?>  
                <p>Мой контент</p>
                <?php if ($_GET['x']) echo $_GET['x']; ?>
                <?php Pjax::end(); ?>
js:

Код: Выделить всё

 $('#pp').click(function(event) {
        event.preventDefault();
        $.pjax.reload({
            container: '#pj0',
            type       : 'GET',
            url        : '/tenders/test',
            data       : {'x':123},
            timeout    : false,
        });
    });
В контроллере:

Код: Выделить всё

    public function actionTest(){
        $x=($_GET['x'])?$_GET['x']:'no get';
        return $this->render('test',['x'=>$x]);
    }
 
Создал новый проект на yii2, вставил туда этот код (только с соответствующим url, ест-но). Там все работает как нужно, а в моем основном проекте не хочет. Подскажите, пожалуйста, по какой причине это может не работать, что еще может влиять на этот функционал, где копать?
Последний раз редактировалось yura1976 2018.12.10, 11:21, всего редактировалось 1 раз.
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: pjax.reload обновляет страницу

Сообщение Dominus »

А если без Pjax?

Код: Выделить всё

$script = "
    $('#pp').click(function(event) {
        event.preventDefault();
                
        var target = event.target,
            url = target.dataset.url,
            container = $('#' + target.dataset.container),
            data = target.dataset.value;
                   
        $.ajax({            
            type : 'GET',
            url : url,
            data : {x: data},
            dataType: 'json',
            beforeSend: function(){
	        container.html('Выполняем запрос...');
	    },
        }).done(function(response) {            
            container.html(response.result);
        }).fail(function (response) {
            container.html('Ошибка!');
            console.log(response);
        });        
    });
";
$this->registerJs($script);
?>

<p id="pp" data-url="<?= \yii\helpers\Url::to(['test']) ?>" data-container="my-content" data-value="12345" class="btn btn-primary">Выбрать</p>
<p>Мой контент</p>
<div id="my-content"></div>
Контроллер:

Код: Выделить всё

public function actionTest()
    {
        if (Yii::$app->request->isAjax) {
            Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
            $x = Yii::$app->request->get('x');
            return [
                'result' => $this->renderAjax('test3', [
                    'x' => $x
                ]),
            ];
        }
        throw new \yii\web\NotFoundHttpException('The requested page does not exist.');
    }
test3.php

Код: Выделить всё

<p>Получены данные: <?= $x ?></p>
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: pjax.reload обновляет страницу

Сообщение urichalex »

Пиджак должен отправлять запрос на ту же страницу. Если он отправляет запрос на другую страницу, то на той странице тоже должен быть пиджак с тем же id
yura1976
Сообщения: 134
Зарегистрирован: 2012.08.06, 13:24

Re: pjax.reload обновляет страницу

Сообщение yura1976 »

Dominus писал(а): 2018.12.09, 23:49 А если без Pjax?
Спасибо! Решение хорошее. Но, желательно, чтобы гет-параметры отображались в url. Pjax позволяет это делать, поэтому именно с ним и начал ковыряться. Вообще, мне это нужно чтобы сделать фильтр по заявкам (диапазон цен, сроков, категорий компаний и т.д.). Для отображения списка заявок использую listview.
yura1976
Сообщения: 134
Зарегистрирован: 2012.08.06, 13:24

Re: pjax.reload обновляет страницу

Сообщение yura1976 »

urichalex писал(а): 2018.12.10, 00:05 Пиджак должен отправлять запрос на ту же страницу. Если он отправляет запрос на другую страницу, то на той странице тоже должен быть пиджак с тем же id
На ту же и отправляет. Проверял.
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: pjax.reload обновляет страницу

Сообщение urichalex »

yura1976 писал(а): 2018.12.10, 11:20
urichalex писал(а): 2018.12.10, 00:05 Пиджак должен отправлять запрос на ту же страницу. Если он отправляет запрос на другую страницу, то на той странице тоже должен быть пиджак с тем же id
На ту же и отправляет. Проверял.
Значит проверяй ответ. Так же пиджак может обновлять страницу если ответ не 200 или по таймауту
yura1976
Сообщения: 134
Зарегистрирован: 2012.08.06, 13:24

Re: pjax.reload обновляет страницу

Сообщение yura1976 »

Проблема оказалась совсем не там, где я ожидал. У меня стоит codemix/yii2-localeurls. Url я указывал конкретно в js-скрипте (что не есть хорошо; лучше делать как предложил Dominus - т.е., через target.dataset.url), соответственно ссылка после установки мультиязычности оказалась неверной.
Ответить