it-swarm.com.de

setTimeout und jQuery: Nicht abgerufener RangeError: Maximale Aufrufstackgröße überschritten

Ich versuche, meine Klasse beim Laden der Seite aufzurufen und die Ergebnisse alle X Sekunden neu zu laden. Nach den setTimeout-Tutorials scheint Jquery mir jedoch einen Fehler zuzuweisen, den ich nicht verstehe, wenn man bedenkt, dass dies Syntaxlosigkeit ist.

Unbekannter RangeError: Maximale Aufrufstackgröße überschritten 

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);
}
10
WASasquatch

Veränderung

setTimeout(lhc(), 5000);

zu

setTimeout(lhc, 5000);

Sie rufen die Funktion direkt ohne Zeitlimit auf, wenn Sie die Klammern hinzufügen. Wenn Sie die Funktion direkt innerhalb derselben Funktion aufrufen, wird sie schnell zu einer Endlosschleife, die den Stapel auffüllt

26
adeneo

Sie können den Fehler ignorieren, wenn <script>window.onerror = function(){ return true;} </script> Ausgeführt wird, und setTimeout(lhc, 5000); einige einstellen.

0