Mit Prototype Version 1.6.0.2.Prototyp Callback-Funktionen Schlucken Ausnahmen
Ich habe ein häufiges Problem, wo Ausnahmen verschluckt werden, wenn sie in einer Callback-Funktion ausgelöst werden, typischerweise wenn ich versuche, die Antwort auf einen Ajax.Request
Aufruf zu behandeln. Hier ist ein einfaches Beispiel:
HTML-Markup:
<input type="button" id="myButton" value="Press Me" />
Javascript:
MYSITE = {};
document.observe("dom:loaded", function() {
// Set up our helper object
MYSITE.pageHelper = new MYSITE.PageHelper();
});
MYSITE.PageHelper = function() {
console.log("PageHelper called.");
$("myButton").observe("click", this.makeCall.bindAsEventListener(this));
};
MYSITE.PageHelper.prototype.makeCall = function() {
console.log("Make call.");
new Ajax.Request(
"remoteCall.cfm",
{
method: 'get',
parameters: "",
onComplete: this.handleCallback.bindAsEventListener(this)
});
};
MYSITE.PageHelper.prototype.handleCallback = function(resp) {
console.log("Start callback processing...");
var x = missingVar + "text"; // This line generates an exception...
console.log("Finished callback processing.");
};
OK, also das Problem ist, dass, wenn Sie diesen Code in Firefox mit Firebug laufen keine Ausnahme ausgegeben wird für die beanstandete Linie - es ist geschluckt. Schluck. Der einzige Weg, den ich kenne, um diese zu fangen (sagen wir, wenn ich debugge) ist, den Inhalt der Callback-Funktion in einen try/catch zu wickeln. Zum Beispiel:
MYSITE.PageHelper.prototype.handleCallback = function(resp) {
try {
console.log("Start callback processing...");
var x = missingVar + "text"; // This line generates an exception...
console.log("Finished callback processing.");
} catch (e) {
console.log(e);
}
};
Hat jemand anderes jemals auf dieses Problem stoßen? Irgendwelche Workarounds da draußen?
Vielen Dank im Voraus!
Ich denke, dass der Code, den Sie zitiert haben, nur für Ajax-Ereignisse funktioniert, nicht für die einfachen onClick-Arten von Ereignissen, zu denen die Frage gestellt wurde. –
Das ist "die" Lösung! Sie sollten die Ajax.Responders -> onException-Methode wie oben dargestellt implementieren. –
Das ist ausgezeichnet, danke, dass du es schön mit allen Quellen ausgebreitet hast – febs