Používám soubor knihovny JavaScript Direct Web Remoting (DWR) a chyba se objevuje pouze v prohlížeči Safari (počítač a iPad).
Píše to
Překročena maximální velikost zásobníku volání.
Co přesně tato chyba znamená a zastaví úplně zpracování?
Také nějaká oprava pro prohlížeč Safari
(Ve skutečnosti na iPadu Safari
píše.
JS:execution exceeded timeout (JS:provádění překročilo časový limit)
což předpokládám, že je stejný problém se zásobníkem volání).
To znamená, že někde v kódu voláte funkci, která následně volá další funkci a tak dále, dokud nenarazíte na limit zásobníku volání.
Důvodem je téměř vždy rekurzivní funkce se základním případem, který není splněn.
Vezměme si tento kód...
(function a() {
a();
})();
Zde je zásobník po několika voláních...
Jak vidíte, zásobník volání roste, dokud nenarazí na limit: pevně nastavenou velikost zásobníku prohlížeče nebo vyčerpání paměti.
Chcete-li to napravit, zajistěte, aby vaše rekurzivní funkce měla základní případ, který je schopna splnit...
(function a(x) {
// The following condition
// is the base case.
if ( ! x) {
return;
}
a(--x);
})(10);
Někde ve vašem kódu je rekurzivní smyčka (tj. funkce, která se nakonec volá znovu a znovu, dokud není zásobník plný).
Jiné prohlížeče mají buď větší zásobníky (takže místo toho dostanete timeout), nebo z nějakého důvodu chybu spolknou (třeba špatně umístěný try-catch).
Pomocí debuggeru zkontrolujte zásobník volání, když dojde k chybě.