Ik gebruik een Direct Web Remoting (DWR) JavaScript bibliotheekbestand en krijg alleen een foutmelding in Safari (desktop en iPad)
Het zegt
Maximale call stack grootte overschreden.
Wat betekent deze foutmelding precies en stopt de verwerking volledig?
Ook een oplossing voor Safari
browser (Eigenlijk op de iPad Safari
, staat er
JS: uitvoering overschreden timeout
waarvan ik aanneem dat het hetzelfde probleem is met de call stack)
Dat betekent dat je ergens in je code een functie aanroept, die op zijn beurt weer een andere functie aanroept, enzovoort, totdat je de limiet van de aanroepstapel bereikt.
Dit is bijna altijd het gevolg van een recursieve functie met een base case waaraan niet wordt voldaan.
Beschouw deze code eens...
(function a() {
a();
})();
Hier is de stack na een handvol aanroepen...
Zoals je kunt zien, groeit de aanroep-stapel tot hij een limiet bereikt: de hardcoded stapelgrootte van de browser of geheugenuitputting.
Om dit op te lossen, zorg ervoor dat je recursieve functie een base case heeft waaraan voldaan kan worden...
(function a(x) {
// The following condition
// is the base case.
if ( ! x) {
return;
}
a(--x);
})(10);
Er is een recursieve lus ergens in je code (d.w.z. een functie die zichzelf uiteindelijk steeds opnieuw aanroept totdat de stack vol is).
Andere browsers hebben ofwel grotere stacks (zodat je een timeout krijgt) of ze slikken de fout om een of andere reden (misschien een slecht geplaatste try-catch).
Gebruik de debugger om de aanroep-stack te controleren wanneer de fout optreedt.