Закрыть
Скидки в Webasyst 25–29 ноября 2021

AJAX is deprecated?

В системе реализован довольно странный AJAX-костыль, суть и смысл которого мне непонятен. Если мы пытаемся получить содержимое страницы товара, текстовой магазина, главной... мы получаем весь HTML полностью. Ок, отлично. Можно в пару строк распарсить нужные блоки по своим местам. Но если мы обращаемся к текстовой сайта или странице категории магазина, то получаем лишь содержимое {$content}. И уже сталкиваемся с кучей проблем, для решения которых приходится лепить костыли в виде скрытых спанов в этих шаблонах, дублирующих нужную мне инфу. Можно конечно так выкрутиться, но зачем это было сделано? Через условие с waRequest::isXMLHttpRequest() я сам решил бы, что мне нужно выводить, а что нет. Можно ли как-то это убрать? Немного ущемляет мои права на свободу творчества :)

6 ответов

  • 1

    Можно обмануть waRequest::isXMLHttpRequest(), если попросить jQuery не посылать заголовок X-Requested-With. Ничего менее костыльного придумать не могу. Но это лучше, чем скрытые спаны :)

    • +1
      Евгений Леман Евгений Леман 18 апреля 2016 04:19 #

      Всё бы ничего, но обманывать нельзя, т.к. без этого условия будет еще больше проблем. И там опять костыли лепить.

      Я в принципе не могу понять для чего это было сделано и найти этому достойное объяснение :) Изначально обнаружил такое поведение на странице категории. В голову пришла мысль о поддержке lazyloading и ajax-фильтрации таким способом. Но мы ведь всё равно там парсим. А вот зачем оно на текстовых страницах сайта и почему с текстовыми в магазине логика иная - даже предположений нет. Но очень любопытно ;)

      В системе должна быть определенность.

      • +1

        Если аккуратно указать заголовок только для нужных запросов (а не глобально в jQuery), не должно быть проблем вроде.

        А нужно это потому что есть темы дизайна, которые работают в режиме одностраничного приложения. Лэйаут загружается один раз, а весь контент грузится XHR'ами. Вся обвязка вокруг содержимого $content им не нужна. А не присылается обвязка не потому что $content сложно распарсить в JS'е, а потому что её дорого каждый раз генерить на сервере. Мало ли какие блоки каких приложений там по менюшкам и сайдбарам распиханы.

        Во время лэйзи лоадинга, кстати, лэйаут тоже не грузится.

        • +1
          Евгений Леман Евгений Леман 18 апреля 2016 05:23 #

          Речь о full ajax магазине. Тут нет каких-то отдельных запросов, он всего один. Уменьшение временных затрат на генерацию layout'a лишний раз - хорошо. Правда в ряде случаев вызывает неудобства. Ну допустим у нас в лейауте находится вся инфа по юзеру, а содержимое шаблона напрямую зависит от группы пользователя, либо еще как-то с ним связана. Зашел юзер на сайт и пошел покурить. Пока курил кончилась сессия и по факту он теперь не авторизован. Грузит он какую-то страничку XHR'ом, а она ему говорит "Вы не авторизованны!". "Как так" - думает юзер. Ведь у него справа вверху написано "Велкам, Вася!". И приходится разработчику лепить костыль в каждом шаблоне в виде скрытого спана с инфой о юзере. А потом парсить это в нужное место.

          Я как бы без претензий, просто хочу обратить внимание на то, что фреймворк не рассчитан на full AJAX. Я конечно понимаю, что таких сайтов... один из миллиона максимум. Но моё дело сообщить.

          • +1
            Syrnik.com Syrnik.com 18 апреля 2016 07:20 #

            Ну, тут ээээ особенности архитектуры фреймворка дают о себе знать. Теоретические обсуждения наверное лучше где-нибудь в более укромном месте вести. ;-)

            По идее-то в одностриничнике ты должен шиблон отдельно получить, отдельно данные. Ну не хуже, а может и лучше, меня знаешь, как оно в ангулярке работает :)

            • +1
              Евгений Леман Евгений Леман 18 апреля 2016 08:20 #

              По идее, по идее... По той самой идее должна быть определенность :) Либо в таких запросах отдавать всегда только содержимое контент-шаблона и пусть лепят костыли(пусть и простые), но фапают на преимущество в скорости, которое даст AJAX без рендера layout'a. Либо всегда отдавать весь HTML и мириться с той мыслью, что прибавка к скорости будет небольшой, но зато реализация намного проще.

              У каждого варианта свои плюсы и минусы. Но сейчас тут "рандомно-комбинированный" какой-то вариант. И костыли и фулл рендер.

              Это не логично. Я не люблю, когда что-то нелогично :)

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите