gpt4 book ai didi

javascript - Prototype JS 吞下 dom :loaded, 和 ajax 回调中的错误?

转载 作者:数据小太阳 更新时间:2023-10-29 04:39:28 26 4
gpt4 key购买 nike

我不明白为什么原型(prototype)会抑制 dom:loaded 事件和 AJAX 处理程序中的错误消息。

给定以下 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>

domready 事件触发,我在控制台中看到日志,但没有任何错误指示。如果您将 console.log(idontexist); 行移出处理程序,您将获得

idontexist is not defined

控制台出错。我觉得有点奇怪,在其他事件处理程序中,比如“点击”,你会收到错误消息,似乎只有 dom:loaded 有这个问题。

AJAX 处理程序也是如此:

new Ajax.Request('/', {
method: 'get',
onComplete: function(r) {
console.log('xhr complete');
alert(youwontseeme);
}
});

您不会看到任何错误。这是 prototype.js 1.6.1,我在文档中找不到任何关于此行为的指示,也找不到在这些处理程序中启用错误报告的方法。

我已经尝试使用 FireBug 的调试器单步执行代码,当它遇到 dom:loaded 处理程序中缺少的变量时,它似乎跳转到了第 53 行名为 K 的函数:

K: function(x) { return x } 

但是怎么办?为什么?什么时候?我在那里看不到任何 try/catch block ,程序流程如何结束?

我知道我可以通过将我的 dom:ready 处理程序打包到 try/catch block 中来使错误可见,但这不是一个很舒服的选择。为 AJAX 调用注册全局 onException 处理程序也是如此。

为什么它甚至会抑制错误?有人以前遇到过这个吗?

最佳答案

一段时间后我发现原型(prototype)将所有异常重定向到 onException 处理程序:

  new Ajax.Request('/ajax_html_echo', {
method: 'get',
onComplete: function(r) {
console.log('xhr complete');
alert(undefinedVar)
},
onException: function(request,e){
console.log(e.message); // prints undefinedVar is not defined
}
});

更多信息在这里

http://www.prototypejs.org/api/ajax/options

onException Triggered whenever an XHR error arises. Has a custom signature: the first argument is the requester (i.e. an Ajax.Request instance), the second is the exception object.

关于javascript - Prototype JS 吞下 dom :loaded, 和 ajax 回调中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2503872/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com