Задать вопрос
@66demon666
Сетевой админ, АТС-админ

Нормально ли грузить HTML по AJAX?

Здравствуйте! Есть сайт, на нем есть система постов, при загрузке страницы с постами они загружаются статически, то есть их формирует PHP, у меня реализована такая вещь, что при нажатии на кнопку "запостить" пост сразу появляется в этом списке, для этого я храню его html шаблон, и динамически его добавляю наверх списка. Таких штук, для которых нужны были бы шаблоны может быть очень много и всех их хранить в том же файле что и основную страницу мне кажется неверным. Использую yii2, есть мысль раскидать всё это по виджетам, но как быть с динамическим добавлением? Пересылать html?
  • Вопрос задан
  • 89 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
@McBernar
Может, пришло то самое время, когда нужно полностью разделить фронт и бек и связать их через api?

Кажется, ваш подход вполне норм, хоть и странноватый. Вы можете уменьшить время получения шаблона, если просто положите его отдельным файлом в вашей структуре файлов проекта и будете получать его гетом напрямую, в обход рендера через yii.

Но блин, этот замес из монолита и js-рендера вас утомит.
Ответ написан
myks92
@myks92 Куратор тега Yii
Нашёл решение — пометь вопрос ответом!
1. Попробуйте использовать js framework, например, vue. Таких мелочей при вашем подходе может всплыть масса. И, как уже вам советовали, стоит подумать о разделении проекта на front и back. Либо внедрить vue в yii2.
2. Если же это вам не нужно и вы хотите идти своим путём можно в контроллере сделать примерно так:

if (Yii::$app->request->isAjax) {
            return $this->renderPartial('_list', [
                'dataProvider' => $dataProvider,
                'checker' => $this->checker
            ]);
        } else {
            return $this->render('index', [
                'searchModel' => $searchModel,
                'dataProvider' => $dataProvider,
                'checker' => $this->checker,
                'futureCount' => $futureCount,
                'pastCount' => $pastCount,
                'myCount' => $myCount,
            ]);
        }

index.php
<div class="box-body">
            <div id="search-content">
                <?= $this->render('_list', [
                    'dataProvider' => $dataProvider,
                    'checker' => $checker
                ]) ?>
            </div>
        </div>


Таким образом, там, где идет загрузка от yii2 - там выводится index.php в котором рендерится_list.php, там где вы обновляете страницу без перезагрузки контроллер вам выдаст только структуру в _list.php. После добавлении записи - просто перезагружаете страницу ajax.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Что не так?
например в ASPX используется такая технология, шлют куски html при перерисовке страницы. Другой вопрос в том что это усложняет ваш код.

В общем не надо фанатизма.
Ответ написан
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
это противоречит принципу отделения данных от представления.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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