Ajax вывод вызова и тайм-аут - PullRequest
0 голосов
/ 15 апреля 2020

Я построил ajax счетчик, который выводит до 6 цифр - например, "120398" и повторяет вызов

function updateNumbers(){
    $.ajax({
    url: totalnumbers.ajaxurl,
    data: {
        action: 'numberstotal'
    },
    success: function (response) {
        var numbers = response.toString(10).replace(/\D/g, '0').split('').map(Number);
        //console.log(numbers);
        var newHTML = [];
        for (var i = 0; i < 6; i++) {
            newHTML.push('<span>' + numbers[i] + '</span>');
        }
        $('.counter').html(newHTML.join(""));
    }
    });
    setTimeout(updateMinutes, 5000);
}

updateNumbers();

, это работает до сих пор.

Вопрос 1:

Теперь, когда есть только 4 цифры (1234), мне по-прежнему нужен итоговый результат, подобный этому

<span>0</span>
<span>0</span>
<span>1</span>
<span>2</span>
<span>3</span>
<span>4</span>

что Я получаю

<span>1</span>
<span>2</span>
<span>3</span>
<span>4</span>
<span>undefined</span>
<span>undefined</span>

Вопрос 2:

Когда есть всего 200000, я хочу выйти из функции setTimeout. Но я не знаю, как получить ответ из ajax, чтобы проверить перед установкой тайм-аута.

Справка была бы отличной. Кажется, я почти на месте: (

1 Ответ

0 голосов
/ 16 апреля 2020

Подумав немного, я сделал это:

function updateNumbers(){
$.ajax({
url: totalnumbers.ajaxurl,
data: {
    action: 'numberstotal'
    },
    success: function (response) {
        if (response < 20000) {
            var stringlength = response.length;
            var numbers = response.toString(10).replace(/\D/g, '0').split('').map(Number);
            var newNumbers = numbers;
            for (var i = stringlength; i < 7; i++) {
                newNumbers.unshift(0);
            }
            var totalNumbers = $.map(newNumbers, function(num) {
                    return('<span>' + num + '</span>');
                });
            $('.counter').html(totalNumbers.join(""));   
            setTimeout(updateNumbers, 5000);
            }
        else {
            var numbers = response.toString(10).replace(/\D/g, '0').split('').map(Number);
            var totalNumbers = $.map(numbers, function(num) {
                    return('<span>' + num + '</span>');
                });
            $('.counter').html(totalNumbers.join(""));
        }
        } 
    });
}
updateNumbers();
...