Non riesco a capire perché il prototipo sopprima i messaggi di errore nell'evento dom:loaded
e nei gestori AJAX.Il prototipo JS ingerisce gli errori in dom: caricati e callback ajax?
Dato il seguente pezzo di codice HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Conforming XHTML 1.1 Template</title>
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript">
document.observe('dom:loaded', function() {
console.log('domready');
console.log(idontexist);
});
</script>
</head>
<body>
</body>
</html>
L'evento domready, vedo il registro nella console, ma non v'è alcuna indicazione di eventuali errori di sorta. Se si sposta la linea console.log(idontexist);
fuori del gestore, si ottiene l'idontexist
non è definito
errore nella console. Trovo un po 'strano, che in altri gestori di eventi, come "click", si ottiene il messaggio di errore, sembra che sia solo il dom:loaded
che ha questo problema.
Lo stesso vale per i gestori di AJAX:
new Ajax.Request('/', {
method: 'get',
onComplete: function(r) {
console.log('xhr complete');
alert(youwontseeme);
}
});
Non vedrete gli eventuali errori. Questo è con prototype.js 1.6.1, e non riesco a trovare alcuna indicazione di questo comportamento nei documenti, né un modo per abilitare la segnalazione degli errori in questi gestori.
ho provato passando attraverso il codice con il debugger di Firebug, e sembra per passare a una funzione sulla linea 53 di nome K, quando incontra la variabile mancante nel gestore dom:loaded
:
K: function(x) { return x }
Ma come? Perché? Quando? Non riesco a vedere nessun blocco try/catch lì, come finisce il flusso del programma?
So che posso rendere visibili gli errori comprimendo il mio gestore dom:ready
nei blocchi try/catch, ma questa non è un'opzione molto comoda. Lo stesso vale per la registrazione di un gestore globale onException per le chiamate AJAX.
Perché sopprime persino gli errori? Qualcuno l'ha già incontrato prima?
Mentre sì, questa è una soluzione parziale, ho detto che mi piacerebbe vedere una soluzione senza registrarti un gestore onException globale per il chiamate AJAX, e questo vale anche per il per- gestori di richieste. –