Відновлення сторінки отриманої по ajax після відкриття браузера

Я не бачу JavaScript слухача, який спрацьовує на подію при завантаженні сторінки. Спробуйте додати щось на зразок:

window.onload = ajaxOnload; // Слухач, що спрацьовує на завантаження сторінки

window.addListenter('click', '.ajax', ajaxLinkLoad); // Слухач, що спрацьовує на клік для завантаженні контенту

function setData(url) {
  axios.get(url).then(function (response) {
    document.getElmentById('content').innerHTML = response.data;
    window.history.pushState(null, null, url);
  });
}

function ajaxOnload() {
  const url = window.location.href;
  setData(url);
}

function ajaxLinkLoad(event, target) {
  const url = target.getAttribute('href');

  setData(url);
  event.preventDefault();
}

З іншого боку, якщо у вас релоад спрацьовує, то мабуть у вас вже є JavaScript-слухач, що спрацьовує на завантаження сторінки, просто ви про нього нічого не кажете.

Коментарі (5)

  1. Alex
    4 місяці тому

    Не зовсім те, здається все ще не зрозуміло пояснив.

    На JS не потрібно додатково підтягувати сторінку, це реалізовано на бекенді. Якщо відкривати сторінку в браузері (без ajax), бекенд рендерить повністю всю сторінку яка запитується по вказаному URL. Якщо ж ми з JS робимо ajax запит, тоді бекенд замість повної сторінки повертає лише частину з контентом, який відповідно замінює блок зі старим контентом і міняє URL через pushState.

    Так реалізована вся навігація на DevZone. Ось такий результат приходить від бекенда на ajax запит

    В цей же блок я і додав js який оновлює сторінку якщо немає title, цей хак, в принципі, розв'язує проблему, але не зовсім гарно.

    Без ajax повертається повна сторінка

    І ця проблема виникає лише якщо відкрити сайт, далі перейти по посиланню яке завантажить іншу сторінку по ajax, закрити браузер і після повторного відкриття браузера на цій вкладці замість повної сторінки буде лише частина html з контентом, який був повернутий останнім ajax запитом.

    0
    1. Костя Третяк
      4 місяці тому

      закрити браузер і після повторного відкриття браузера на цій вкладці замість повної сторінки буде лише частина html з контентом, який був повернутий останнім ajax запитом.

      Ага, ви мабуть маєте на увазі не просто відкриття браузера, а відновлення сесії раніше закритих сторінок (це можна зробити або в налаштуваннях браузерах, або після відкриття браузера натиснути Ctrl+Shift+T). В такому разі браузер справді не відправляє запит на бекенд, на скільки я пам'ятаю. Тільки дивно, що показується лише частина контенту. По-ідеї, повинна показуватись повністю та сторінка, яку ви закривали, навіть якщо бекенд не працює.

      Спробуйте пошукати щось за запитом restore last tabs chrome "http request".

      1
      1. Alex
        4 місяці тому

        Бінго. Нарешті я зміг пояснити 😃

        дивно, що показується лише частина контенту

        Тому я і вирішив що роблю щось не так. Думав що фронтендери давно розв'язали цю задачу і знають як правильно робити.

        Ще пошукаю в чому може бути причина.

        0
        1. Костя Третяк
          4 місяці тому

          Бінго. Нарешті я зміг пояснити

          Так, перша ваша версія запитання точно не сподобалася б користувачам stackoverflow і github. Припускаю що ви не часто щось запитували на подібних сайтах.

          0
          1. Alex
            4 місяці тому

            Так і є, майже ніколи там нічого не запитував.

            0
Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація