Jag använder en Direct Web Remoting (DWR) JavaScript-biblioteksfil och får ett fel endast i Safari (dator och iPad).
Det står
Maximal storlek på anropsstacken överskrids.
Vad exakt betyder detta fel och stoppar det bearbetningen helt och hållet?
Finns det någon lösning för webbläsaren Safari
(På iPad Safari
står det faktiskt följande
JS:exekvering överskred timeout
vilket jag antar är samma problem med anropsstacken)
Det betyder att du någonstans i din kod anropar en funktion som i sin tur anropar en annan funktion och så vidare, tills du når gränsen för anropsstacken.
Detta beror nästan alltid på en rekursiv funktion med ett basfall som inte uppfylls.
Tänk på den här koden...
(function a() {
a();
})();
Här är stacken efter en handfull anrop...
Som du kan se växer anropsstapeln tills den stöter på en gräns: webbläsarens hårdkodade stackstorlek eller att minnet är uttömt.
För att åtgärda detta bör du se till att din rekursiva funktion har ett basfall som kan uppfyllas...
(function a(x) {
// The following condition
// is the base case.
if ( ! x) {
return;
}
a(--x);
})(10);
Det finns en rekursiv slinga någonstans i din kod (dvs. en funktion som så småningom anropar sig själv igen och igen tills stacken är full).
Andra webbläsare har antingen större stackar (så att du får en timeout i stället) eller så sväljer de felet av någon anledning (kanske en dåligt placerad try-catch).
Använd felsökaren för att kontrollera anropsstacken när felet uppstår.