Вывод view по ссылке с помощью ajax

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
Drugpunker
Сообщения: 187
Зарегистрирован: 2014.08.13, 19:44

Вывод view по ссылке с помощью ajax

Сообщение Drugpunker »

Приветствую всех.

Пишу админку.
Сделал вывод дерева категорий (nested sets).
Хочу, чтобы в 2-х колоночном index.php в левой колонке выводились категории (деревом), а в правой (при клике на ссылку) выводилась форма Update.

Понимаю, что нужно реализовать с помощью ajax.
Но не понимаю как.

В цикле, для каждой категории добавил:

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

echo Html::a(Html::encode($child->menu_name), "#",
                            [
                                'onclick'=>"
                                $.ajax({
                                type:'GET',
                                cache:false,
                                url:".Url::to("menu/view-ajax").",
                                data: {id:$child->menu_id},
                                success: function(data) {
                                    $('#view').html(data);
                                },
                                error: function(){
                                    alert('Ошибка Ajax')
                                }",

                            ]);
В контроллер добавил метод:

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

public function actionViewAjax($id)
    {
        return $this->renderAjax('view', [
            'model' => $this->findModel($id),
        ]);
    }
Валятся js ошибки
menu:636 GET http://mysite/debug/default/toolbar?tag=5dd2f74b8ea27 400 (Bad Request)
ajax @ menu:636
(anonymous) @ menu:665
(anonymous) @ menu:1015
и
Uncaught SyntaxError: Unexpected end of input
И всё это дело не работает.
Направьте пжл в правильную сторону.
Что делаю не так.

yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Вывод view по ссылке с помощью ajax

Сообщение yiiliveext »

Метод ajax не закрыли })

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

echo Html::a(Html::encode($child->menu_name), "#",
                            [
                                'onclick'=>"
                                $.ajax({
                                    type:'GET',
                                    cache:false,
                                    url:".Url::to("menu/view-ajax").",
                                    data: {id:$child->menu_id},
                                    success: function(data) {
                                         $('#view').html(data);
                                    },
                                    error: function(){
                                        alert('Ошибка Ajax');
                                    }
                                })",

                            ]);

Drugpunker
Сообщения: 187
Зарегистрирован: 2014.08.13, 19:44

Re: Вывод view по ссылке с помощью ajax

Сообщение Drugpunker »

yiiliveext писал(а):
2019.11.19, 10:04
Метод ajax не закрыли })

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

echo Html::a(Html::encode($child->menu_name), "#",
                            [
                                'onclick'=>"
                                $.ajax({
                                    type:'GET',
                                    cache:false,
                                    url:".Url::to("menu/view-ajax").",
                                    data: {id:$child->menu_id},
                                    success: function(data) {
                                         $('#view').html(data);
                                    },
                                    error: function(){
                                        alert('Ошибка Ajax');
                                    }
                                })",

                            ]);

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

echo Html::a(Html::encode($child->menu_name), "#",
                            [
                                'onclick'=>"
                                $.ajax
({

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

type:'GET',
                                    cache:false,
                                    url:".Url::to("menu/view-ajax").",
                                    data: {id:$child->menu_id},
                                    success: function(data) {
                                         $('#view').html(data);
                                    },
                                    error: function(){
                                        alert('Ошибка Ajax');
                                    }
}) Друг, покажи пжл где. В упор не вижу.
Выделил синим, где я вижу рамки метода.

yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Вывод view по ссылке с помощью ajax

Сообщение yiiliveext »

Drugpunker писал(а):
2019.11.19, 15:54
Друг, покажи пжл где. В упор не вижу.
Выделил синим, где я вижу рамки метода.
Так это вы в моем коде выделили, там он закрыт, это уже исправленный код. Попробуйте то же сделать в своем.

Drugpunker
Сообщения: 187
Зарегистрирован: 2014.08.13, 19:44

Re: Вывод view по ссылке с помощью ajax

Сообщение Drugpunker »

yiiliveext писал(а):
2019.11.19, 15:56
Drugpunker писал(а):
2019.11.19, 15:54
Друг, покажи пжл где. В упор не вижу.
Выделил синим, где я вижу рамки метода.
Так это вы в моем коде выделили, там он закрыт, это уже исправленный код. Попробуйте то же сделать в своем.
Нашёл. Спасибо.
Там ещё доп кавычки для URL нужны были.

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

echo Html::a(Html::encode($child->menu_name), "#",
                            [
                                'onclick'=>"
                                $.ajax({
                                    type:'GET',
                                    cache:false,
                                    dataType:'html',
                                    url:'".Url::to(['/menu'])."',
                                    data: {id:$child->menu_id,},
                                    success: function(data) {
                                        $('#view').html(data);
                                    },
                                    error: function(request, status, error){
                                        $('#view').html(request.responseText);
                                    }
                                })",
                            ]);
Запрос работает.
Но в блок вывода рендерится индексная страница.
А должна выводиться view/id.
Как-будто отрабатывает метод actionIndex, а должен

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

public function actionViewAjax($id)
    {
        return $this->renderAjax('view', [
            'model' => $this->findModel($id),
        ]);
    }
Может быть связано с чпу(у меня настроен)...

И ещё, непонятно почему в урле mysite/menu?id=3&_=1574192505841 (как сообщает Headers браузера) присутствует &_=1574192505841.
Что это такое? Какой-то ajax идентификатор?

yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Вывод view по ссылке с помощью ajax

Сообщение yiiliveext »

В панели отладчика посмотрите, там видно запрос и правило сработавшее.

Drugpunker
Сообщения: 187
Зарегистрирован: 2014.08.13, 19:44

Re: Вывод view по ссылке с помощью ajax

Сообщение Drugpunker »

Вобщем перекидывало на дефолтный маршрут, потому что (как я думаю) настроены чпу.
Ajax строил url так menu/?id=4.
Как форматировать url в запросе, я так и не придумал.
Поэтому убрал свойство data и прописал

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

url:'".Url::to(['/menu/'.$child->menu_id])."',
А также заменил render на renderPartial, чтобы не тянулся layout, а только содержимое.

Надеюсь кому-нибудь пригодится.
В сети реально нет хороших примеров с таким случаем.

Закрыто