JavaScript - обнаружение, если произошел запрос POST - PullRequest
0 голосов
/ 30 ноября 2018

У меня небольшая проблема: мне нужно определить, не выполнил ли пользователь моего веб-сайта какой-либо запрос Ajax POST в установленный период времени, и дать ему подсказку, чтобы что-то с этим сделать.У меня уже есть следующий код:

var idleCounter = 600
var loginTimeoutCounter = setInterval(function() {
    console.log(idleCounter)

    // If a POST request is detected, reset idleCounter to max value.

    if (idleCounter > 0) {
        idleCounter -= 1
    } else {
        var promptAboutLogout = confirm('You have been idle for more than 6 hours.\n\n' + 
       'Your login session could have expired by now.\n\n' + 
       'Please be sure to refresh this web page before attempting to upload new content.\n\n' +
       'Press OK to reload this page, or Cancel to stay on it as-is.')
    if (promptAboutLogout) {
        clearInterval(loginTimeoutCounter)
        location.reload()  // Reload the web page to refresh the login credentials.
    } else {
        idleCounter = 600   // Re-set the counter for 10 min to give user another prompt.
    }
  }
}, 1000)

Я просто не могу понять, как аккуратно добавить код для обнаружения запроса POST.Я не хочу вклеивать модификацию значения idleCounter в форму отправки EventListener несколькими сотнями строк ранее, потому что это будет грязно и трудно вернуться к тому моменту, когда код пройдет через следующую ревизию в любом обозримом будущем.

Есть ли какая-нибудь аккуратная функция JS, которая улавливает возникновение любого запроса POST?

1 Ответ

0 голосов
/ 30 ноября 2018

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

Теперь, если вы используете общий контроллер, вы можете избавиться от этого таймера все вместе.Когда сессия истечет, ваш сервер будет перенаправлен на страницу входа, в основном с кодом состояния 302. Ваш браузер обработает этот запрос на перенаправление и предоставит ваш обратный вызов ajax с помощью html страницы входа.На этом этапе вы можете запросить диалог сообщения или событие, лучше отобразить экран входа в систему, чтобы пользователь мог повторно подтвердить свою подлинность и продолжить свою работу оттуда.Это должно привести к некоторому изменению кода, но, безусловно, должно облегчить ситуацию в будущем.

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