Задать вопрос
@ZaxapKramer
Больной верстальщик

XMLHttpRequest; Как закэшировать результаты запросов до перезагрузки страницы?

Здравствуйте. Делаю небольшой сайт с использованием Ajax - XMLHttpRequest.
JQuery нашел для этих дел тяжеловатым (самая большая страница весит около 100кб, JQuery - 85кб), использую нативный js.
HTML5 History API, при смене адреса в строке браузера подгружается контент из соответствующих php-файлов (например, при переходе на /page/1 отдается /index.php?page=1).

Необходимо, чтобы при переходе на предыдущие/следующие страницы (кнопки "Назад"/"Вперед" в браузере), возвращались уже закэшированные результаты, дабы не загружать каждый раз все по-новой. Как это можно организовать без JQuery (не на год-два, а просто до перезагрузки страницы)? Или же такого рода кэширование включено в XMLHttpRequest по-умолчанию (чего я не увидел, возможно, ввиду непонимания, как это можно проверить вообще, и незнания)?
P.S. Google выдает море информации о том, как отключить кэширование в XMLHttpRequest или включить его в JQuery, а о включении данного в XMLHttpRequest практически ни слова.
  • Вопрос задан
  • 519 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
AppFA
@AppFA
Frontend developer at Yandex
Ну можно как-то так, завести кэш, проверять есть ли в нем текущая страница, если да - то отдавать её, если нет - отправлять запрос, ложить в кэш:
'use strict';

let cache = {};
let url = '/index.php?page=1';

const page = document.querySelector('.page');

if (!cache[url]) {
    fetch(url)
        .then((response) => {
            return response.text();
        })
        .then((data) => {
            cache[url] = data;
            page.innerHTML = data;
        });
} else {
    page.innerHTML = cache[url];
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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