Jeg bruger en Direct Web Remoting (DWR)-JavaScript-biblioteksfil og får kun en fejl i Safari (desktop og iPad)
Der står
Maksimal størrelse af call stack overskredet.
Hvad betyder denne fejl helt præcist, og stopper den behandlingen helt?
Også nogen rettelse til Safari
browser (Faktisk på iPad Safari
, står der
JS:execution exceeded timeout
hvilket jeg antager er det samme problem med call stack)
Det betyder, at du et eller andet sted i din kode kalder en funktion, som igen kalder en anden funktion osv., indtil du når grænsen for call stack-grænsen.
Dette skyldes næsten altid en rekursiv funktion med en base case, der ikke bliver opfyldt.
Overvej denne kode...
(function a() {
a();
})();
Her er stakken efter en håndfuld kald...
Som du kan se, vokser stakken af opkald, indtil den rammer en grænse: browserens hardcodede stakstørrelse eller udtømning af hukommelsen.
For at løse det skal du sikre dig, at din rekursive funktion har et grundtilfælde, som kan opfyldes...
(function a(x) {
// The following condition
// is the base case.
if ( ! x) {
return;
}
a(--x);
})(10);
Der er en rekursiv løkke et sted i din kode (dvs. en funktion, der til sidst kalder sig selv igen og igen, indtil stakken er fuld).
Andre browsere har enten større stakke (så du får en timeout i stedet) eller også sluger de fejlen af en eller anden grund (måske en dårligt placeret try-catch).
Brug debuggeren til at tjekke call stack'en, når fejlen opstår.