Jeg bruker en Direct Web Remoting (DWR) JavaScript-biblioteksfil og får bare en feil i Safari (desktop og iPad).
Det står
Maksimal anropsstabelstørrelse overskredet.
Hva betyr denne feilen nøyaktig, og stopper den behandlingen helt?
Også enhver løsning for Safari
nettleser (faktisk på iPad Safari
, står det
JS: utførelse overskredet tidsavbrudd
som jeg antar er det samme anropsstabelproblemet)
Det betyr at et eller annet sted i koden din kaller du en funksjon som igjen kaller en annen funksjon og så videre, til du treffer call stack-grensen.
Dette er nesten alltid på grunn av en rekursiv funksjon med en base case som ikke blir oppfylt.
Tenk på denne koden...
(function a() {
a();
})();
Her er bunken etter en håndfull samtaler...
Som du kan se, vokser anropsstakken til den treffer en grense: nettleserens hardkodede stakkstørrelse eller minneutmattelse.
For å fikse det, sørg for at den rekursive funksjonen din har et grunntilfelle som kan oppfylles ...
(function a(x) {
// The following condition
// is the base case.
if ( ! x) {
return;
}
a(--x);
})(10);
Det er en rekursiv løkke et sted i koden din (dvs. en funksjon som til slutt kaller seg selv igjen og igjen til stakken er full).
Andre nettlesere har enten større stabler (slik at du får en timeout i stedet) eller de svelger feilen av en eller annen grunn (kanskje en dårlig plassert try-catch).
Bruk feilsøkingsprogrammet til å sjekke anropsstakken når feilen oppstår.