Задать вопрос
@pvgdrk

Как передать в queue актуальное значение переменной?

Есть функция которая получает какие-то данные с сервера. Сервер может ответить почти мгновенно, а может и потупить немного. В случае задержки, что бы пользователь понимал что происходит(ничего не зависло, идет загрузка), появляется гифка загрузки. В то же время, когда ответ приходит быстро, гифка раздражающе появляется на долю секунды и тут же исчезает. По-этому было решено сделать появление гифки отложенным на 1 секунду. Этого времени в большинстве случаев хватает на ответ с сервера:

function showLoadingGif(stat) {
    $('#loadingGif').delay(1000).queue(function(next){
        if (stat === 0){
            $(this).removeClass('hidden');
            next();
        }
    });
}


Перед ajax запросом исполняется эта функция и через секунду проверяет не пришел ли ответ. Если пришел (stat == 1), то гифка загрузки не будет показана.
Но вот незадача, функция принимает не текущее значение stat, а то которое было при исполнении функции. Как передать в queue актуальное значение переменной?
  • Вопрос задан
  • 2196 просмотров
Подписаться 2 Оценить Комментировать
Решение пользователя Rsa97 К ответам на вопрос (2)
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Сделайте по другому - при запросе запускайте таймер на 1 секунду, при срабатывании таймера показывайте индикатор загрузки, при получении ответа от сервера останавливайте таймер и скрывайте индикатор.
var iv = setInterval(function() {
        $('#loadingGif').show();
    }, 1000);
$.ajax(...)
.always(function() {
    clearInterval(iv);
    $('#loadingGif').hide();
});

Правда, если загрузка будет чуть дольше секунды, всё равно индикатор будет мелькать.
Ответ написан