У меня есть функция, которая проверяет статус подключения к серверу. Я хочу запустить 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);
});
Следите за тем, уже ли выполнялись эффекты затухания. Затем проверьте его, прежде чем запускать затухание. Вот пример, который использует переменную 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
, поэтому он ничего не делает.
true
после первого раза. Не выполняйте эту логику, когда переменная ужеtrue
.url
каждые 5 секунд. Это предполагаемое поведение? Я спрашиваю, если это не так, то вам нужно разобраться со случаем, когда подключение возобновляется после потери.