2014-03-29 11 views
10

Ich versuche, meine Klasse aufrufen, wie die Seite lädt, sowie neu die Ergebnisse immer X Sekunden, aber folgende setTimeout-Tutorials, scheint Jquery mich zu werfen Ein Fehler, den ich nicht verstehe, wenn man von Syntaxlosigkeit spricht.setTimeout und jQuery: Uncaught RangeError: Maximale Call-Stack-Größe überschritten

Uncaught RangeError: Maximum call stack size exceeded

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); 
} 
+2

Dies ist kein Duplikat. Das Problem ist hier ein ungültiger Aufruf von 'lhc()', was eigentlich ein einfacher Syntaxfehler ist. Es verursacht die gleiche Nachricht, aber der Ursprung ist ziemlich spezifisch. – Dariusz

Antwort

25

ändern

setTimeout(lhc(), 5000); 

zu

setTimeout(lhc, 5000); 

Sie sind ohne Timeout die Funktion direkt aufrufen, wenn Sie die Klammer hinzufügen und die Funktion sofort innerhalb der anruf Die gleiche Funktion wird schnell zu einer Endlosschleife, die den Stapel füllt

+0

Danke, das macht Sinn. Jetzt muss ich nur mein Token-Problem herausfinden und Token wiederverwenden, anstatt es in einem ganz neuen lol oops – WASasquatch

+0

@adeneo Danke und +1 zu aktualisieren. Du hast mich gerettet :) aber eine Frage, du meinst, ich kann Parameter nicht an Funktion senden, wenn ich Timeout dafür einstellen will. Vorerst und mit diesem Ansatz habe ich den Parameter in globale Variable geändert, aber es ist nicht so süß und gut. Weißt du jetzt, wie ich Timeout für eine Funktion einstellen und Parameter darin senden könnte. – QMaster

+0

@QMaster closure - 'setTimeout (Funktion {) {lhc (param1, param2)}, 5000)' – daviestar

0

Sie können Fehler ignorieren, wenn Sie <script>window.onerror = function(){ return true;} </script> ausführen und setTimeout(lhc, 5000); einige setzen.

+1

Set 'Fenster. onerror "vor deinem Skript. –