@YakutD

Как правильно организовать динамическое обновление блоков?

Здравствуйте, прошу не кидаться камнями за вопрос, постараюсь выразить его как можно внятнее.
Работаем над сайтом, в котором одну из страниц вроде как можно с натяжкой назвать SPA (при щелчке по определенному элементу меню обновляется содержимое определенного блока, перезагрузка страницы не предусмотрена ) . Функция которая за это отвечает работает следующим образом:
function myrender(object, selector, modal){
    //$(  selector).load('/public_html/'+object+'.html');
    $.ajax({
        url: '/myrender',
        type: "post",
        data: 'load='+ object +'&modal='+ modal,
        beforeSend: function(){

        },
        success: function(data){
                if(data.length > 100){/*Проверяя длину ответа, мы можем примерно понять пришло сообщение джсон ,или же хтмл*/
                    $(selector).html(data);
                    //alert(data.length);
                }
                else {
                    data = JSON.parse(data);
                    alert(data.msg);
                }
          }
    });

}

Бэкэнд у нас на Slim 2.
/*
Полный код приводить думаю нет смысла, так как тут только
всякие проверки и валидации и запросы к БД

*/
  $app->render('/public_html/'$_POST['load'].'html',['data'=> $data]/*данные к отправке*/;

Проблема вот в чем, при загрузке страницы в самый первый раз, когда пользователь щелкает по элементам вызывающим функцию myrender, то в нужном блоке информация не меняется совершенно. Однако спустя секунд 10 -15 (а то и больше), эта функция вставляет все блоки которые возвращал сервер за совершенные вызовы функции, поочередно. Как я понимаю, сервер (пока что это локальная машина) попросту не успевает отдать все ответы сразу.

Так вот, подскажите пожалуйста, как лучше поступить в этой ситуации? Делать что то с аяксом, чтобы увеличить его быстродействие, или вывести все блоки сразу, убрав им видимость и включая в зависимости от того что хочет пользователь?
P.S. Знаю что есть различные фреймворки для SPA, но в нашем проекте только одна страница требует подобный функционал, поэтому было решено воздержаться от их использования.
  • Вопрос задан
  • 258 просмотров
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
1. Проверяйте почему так долго сервер отвечает. Что в beforeSend, возможно там таймаут или адская функция расчета траектории полета гнезда над кукушкой.
2. Делайте таймаут, при достижении которого ответ уже не имеет значения и блок не будет обновляться или будет выполнен обычный get.
3. Тот велосипед, что Вы придумываете - уже придумали. Называется он pjax: https://github.com/defunkt/jquery-pjax
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы