Sto usando un file di libreria JavaScript Direct Web Remoting (DWR) e sto ottenendo un errore solo in Safari (desktop e iPad)
Dice
Dimensione massima dello stack delle chiamate superata.
Cosa significa esattamente questo errore e interrompe completamente l'elaborazione?
Anche qualsiasi correzione per il browser Safari
(In realtà sul iPad Safari
, dice
JS:execution exceeded timeout
che presumo sia lo stesso problema di call stack)
Significa che da qualche parte nel vostro codice, state chiamando una funzione che a sua volta chiama un'altra funzione e così via, fino a raggiungere il limite dello stack delle chiamate.
Questo è quasi sempre a causa di una funzione ricorsiva con un caso base che non viene soddisfatto.
Considerate questo codice...
(function a() {
a();
})();
Ecco lo stack dopo una manciata di chiamate...
Come potete vedere, lo stack delle chiamate cresce fino a quando non colpisce un limite: la dimensione dello stack hardcoded del browser o l'esaurimento della memoria.
Per risolvere il problema, assicuratevi che la vostra funzione ricorsiva abbia un caso base che possa essere soddisfatto...
(function a(x) {
// The following condition
// is the base case.
if ( ! x) {
return;
}
a(--x);
})(10);
C'è un ciclo ricorsivo da qualche parte nel tuo codice (cioè una funzione che alla fine chiama se stessa ancora e ancora finché lo stack è pieno).
Altri browser o hanno stack più grandi (quindi si ottiene un timeout) o ingoiano l'errore per qualche motivo (forse un try-catch mal posizionato).
Usate il debugger per controllare lo stack delle chiamate quando avviene l'errore.