Запускайте часть функции один раз, но оставляйте функцию каждые 5 секунд

0

У меня есть функция, которая проверяет статус подключения к серверу. Я хочу запустить checkOnline каждые 5 секунд. Если соединение потеряно, и он продолжает терпеть неудачу, сообщение fadeIn для сообщения об ошибке продолжает работать (создает эффект мигания). Как я могу изменить его так, чтобы функции затухания выполнялись только один раз, когда он терпит неудачу, но все равно продолжает проверять соединение.

$(function () {

var url = 'https://examplesite.com/';

function checkOnline() {
    $.get(url).done(function () {
        window.location = url;
    }).fail(function () {
        $('.errortext').hide().fadeIn(500);
        $('.loadingtext').fadeOut(500);
    });
};

window.setInterval(function () { checkOnline(); }, 5000);
setTimeout(function () { checkOnline(); }, 2000);

});
  • 5
    Установите значение переменной «Я уже показывал сообщение об ошибке» true после первого раза. Не выполняйте эту логику, когда переменная уже true .
  • 0
    Предполагая наличие соединения, похоже, что вы перезагружаете страницу или повторно посещаете url каждые 5 секунд. Это предполагаемое поведение? Я спрашиваю, если это не так, то вам нужно разобраться со случаем, когда подключение возобновляется после потери.
Показать ещё 1 комментарий
Теги:

1 ответ

0
Лучший ответ

Следите за тем, уже ли выполнялись эффекты затухания. Затем проверьте его, прежде чем запускать затухание. Вот пример, который использует переменную fadeFlag:

var fadeFlag = false;

function fadeOnce() {
    // Has fade happened already?
    if (fadeFlag === false) {
        // No. Then do the effects
        $('.errortext').hide().fadeIn(500);
        $('.loadingtext').fadeOut();
        fadeFlag = true;
    }
}

function checkOnline() {
    $.get(url).done(function () {
        window.location = url;
    }).fail(function () {
        // Try the fade effects
        fadeOnce();
    });
};

При первом fadeOnce() он запускает эффекты, а затем устанавливает fadeFlag в true. В следующий раз он увидит, что fadeFlag true, поэтому он ничего не делает.

  • 0
    Отлично, отлично работает! Спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню