SetTimeout и jQuery: Uncaught RangeError: превышен максимальный размер стека вызовов - программирование
Подтвердить что ты не робот

SetTimeout и jQuery: Uncaught RangeError: превышен максимальный размер стека вызовов

Я пытаюсь вызвать свой класс при загрузке страницы, а также перезагрузить результаты за все X секунд, но, следуя инструкциям setTimeout, jquery, кажется, подбрасывает мне ошибку, я не понимаю, учитывая ее синтаксис.

Uncaught RangeError: максимальный размер стека вызовов

var rand = function() {
    return Math.random().toString(36).substr(2);
};

lhc();

function lhc(){
    $('#lhcb a').each(function() {
        var rawlink = $(this).attr("href");
        var link = encodeURIComponent( rawlink );
        var token = rand();
        var href = $(this).prop('href');
        var proceed = $.getJSON( "lhc/link.php?link=" + link + "&a=c", function( data ) {
            if ( data.proceed == 'true' ) {
                return true;
            } else {
                return false;
            }
        }).error(function(e) { alert("error"); console.log(e);});
        if ( href.match("^javascript:") ) {
            proceed = false;
        }
        if ( rawlink.charAt(0) != '#' ) {
            if ( proceed ) {
                $(this).after( " <span style='font-size:xx-small;'>( Hits: <span id='" + token + "'></span> )</span>" );
                    $.getJSON( "lhc/link.php?link=" + link + "&a=q", function( data ) {
                        $('#' + token).html(data['hits']);
                    }).error(function(e) { alert("error"); console.log(e);});
                $(this).attr( "href", "lhc/link.php?link=" + link + "&a=g" );
            }
        }

    });
    setTimeout(lhc(), 5000);
}
4b9b3361

Ответ 1

Изменить

setTimeout(lhc(), 5000);

к

setTimeout(lhc, 5000);

Вы вызываете функцию напрямую без тайм-аута, когда вы добавляете скобки, а вызов функции сразу внутри одной и той же функции быстро становится бесконечным циклом, который заполняет стек

Ответ 2

Вы можете игнорировать ошибку при запуске <script>window.onerror = function(){ return true;} </script> И установите setTimeout(lhc, 5000); некоторые.