Есть ли способ вызвать готовую функцию при вызове jQuery AJAX? - PullRequest
1 голос
/ 14 января 2020

У меня есть функция, которая должна продолжаться только после завершения вызова AJAX, но я хочу иметь возможность пропустить этот вызов AJAX, если у меня уже есть данные из последнего сеанса в моем локальном хранилище.

Мой текущий код:

$.when(getAddresses()).done(function (data) {
        addresses = data.data;;

        localStorage['addresses'] = JSON.stringify(addresses);

        {{Rest of the code that should be executed after the AJAX call}}
}

Заранее спасибо!

1 Ответ

3 голосов
/ 14 января 2020

Сделайте это наоборот.

Проверьте данные локально и даже не отправляйте запрос, если он у вас уже есть.

Оберните данные в обещание, чтобы оно было всегда иметь один и тот же API независимо от того, откуда вы его извлекаете.

async function get_data() {
    let addresses = localStorage.getItem('addresses');
    if (addresses) {
         return JSON.parse(addresses);
    }
    let ajaxData = await getAddresses();
    addresses = ajaxData.data;
    localStorage.setItem('addresses', JSON.stringify(addresses));
    return addresses;
}

get_data().then(data => {
    // Rest of the code that should be executed after the AJAX call
});

Другой подход - забыть о localStorage и просто настроить веб-сервис на подходящие заголовки кэширования . Затем вы можете сделать HTTP-запрос, но если информация о кеше показывает, что кэш браузера содержит обновленные данные, он вообще не будет выполнять HTTP-запрос.

Вам не нужно заново изобретать локальное кеширование данные. HTTP запекла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...