原型回调函数吞掉异常

2023-12-07

使用原型版本 1.6.0.2。

我有一个常见的问题,异常在回调函数中抛出时被吞没,通常是当我尝试处理对Ajax.Request称呼。这是一个简单的例子:

HTML 标记:

<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.");
};

好的,所以问题是,如果您在 Firefox 中使用 Firebug 运行此代码,则有问题的行不会输出任何异常 - 它会被吞掉。咕噜咕噜。 我知道捕获这些的唯一方法(假设我正在调试)是将回调函数的内容包装在 try/catch 中。例如:

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);
    }
};

还有其他人遇到过这个问题吗?有什么解决方法吗?

提前致谢!


截至今天,这是已知的行为:

这里有一张增强处理这些吞没异常的票证:

https://prototype.lighthouseapp.com/projects/8886/tickets/634-no-exception-on-error-in-oncreate-method-of-ajaxrequest

建议的一种解决方法是添加以下代码(感谢 Glenn Maynard!):

Ajax.Responders.register({ 
        onException: function(request, exception) { 
                (function() { throw exception; }).defer(); 
        } 
});

希望能帮助其他人解决同样的问题,直到实施更永久的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

原型回调函数吞掉异常 的相关文章

随机推荐

  • Spring Boot 错误:由于缺少 EmbeddedServletContainerFactory bean,无法启动 EmbeddedWebApplicationContext

    我正在尝试使用 Spring Data GemFire 将数据放入 GemFire 中 我跟着这个link Region stockdata public class StockInfo Id public String symbol pu
  • 通过 N 列块重塑 Pandas 数据框列

    我有 1 个数据框 其中的列块需要重新调整为行 我尝试使用 stack 和 Melt 但无法找到正确的方法 这是我期望的一个例子 data id a1 a2 a3 a4 year 20 20 19 18 b A 1 2 3 4 b B 5
  • 我在关于 c++ 的声明中遗漏了什么吗?

    除了声明 定义和预处理器指令之外 您不能在函数之外使用代码 这个说法准确吗 还是我遗漏了什么 我正在教我的侄子编程 他试图在 main 之前添加一个 while 循环 他还很年轻 我想给他一个他能理解的简单的硬规则 不完全是 你还可以将表达
  • 就渲染时间和性能而言,面板按什么顺序最有效?

    很多时候 多个面板都适合我想要的布局 但我知道不同面板类型的渲染时间存在差异 例如 MSDN指出 一个比较简单的Panel 例如Canvas 可以显着地 比更复杂的性能更好Panel 例如Grid 那么就渲染时间和性能而言 WPF 面板按什
  • NSNumber >= 13 不会保留。其他一切都会

    我当前正在处理的代码需要将 NSNumber 对象添加到数组中 所有值为 0 12 的 NSNumber 都可以正常添加 但 13 以后会导致 EXC BAD ACCESS 我打开 NSZombieEnabled 现在得到 CFNumber
  • IIS 站点节点不会扩展

    我昨天在本地 IIS 上添加了一个新网站 Windows 8 1 上的 IIS 8 5 添加后 IIS 无限期地挂在加载循环中 最终我不得不通过任务管理器终止它 昨晚很晚了 我屈服了 关掉了电脑 今天早上我的网站都不起作用 全部都返回了No
  • 将标题添加到 xtable

    我不确定这是 R 问题还是 Sweave 问题 我正在一个简单的表格中查看 2 个时间点的学生分数 3 年级和 6 年级 我已经创建了表格并打印出来 但是我想添加标签 以便人们知道哪个分数来自哪个年级 我的 Sweave 代码是 lt
  • 将 XML 转换为动态 C# 对象

    我使用以下 C 代码通过 JSON Net 框架将 JSON 数据字符串转换为动态对象 Creates a dynamic Net object representing the JSON data var ProductDB JsonCo
  • 尝试包含一个库,但不断收到“未定义的引用”消息

    我正在尝试使用 libtommath 库 我在 Ubuntu Linux 上的项目中使用 NetBeans IDE 我已经下载并构建了该库 我已经完成了 make install 以将生成的 a 文件放入 usr lib 并将 h 文件放入
  • Common Lisp,引用值和实际值

    考虑这段代码 defvar lst 1 1 defmacro get x x lst nth x lst defun get y y lst nth y lst 现在让我们假设我想更改名为的列表元素的值lst the car with ge
  • NSUndoManager 在 Swift 代码中转换 NSUndoManagerProxy 崩溃

    在我们的应用程序中 我们使用以下代码 let lInvocationTarget lUndoManager prepare withInvocationTarget self let lInvocationTarget as MyObjec
  • IE6 (IE7) 上的 JSON

    抱歉我的不耐烦 但是经过几周的熬夜并将我的网络上线后 我没有任何剩余的精力来调试 我只是无法谷歌如何在 IE6 和 IE7 上实现 JSON 我正在使用 JSON stringify 据我了解 JSON 不是内置在 IE6 7 上的 必须在
  • d3 单击圆圈暂停并恢复标记沿线的过渡

    我希望帮助纠正我的代码 单击标记圆圈元素以暂停或恢复该元素沿线的转换 我的代码沿一条线移动标记 我可以使用单击按钮元素来暂停和恢复此转换 但我希望能够单击标记圆圈本身 而不是按钮 我使用了各种参考资料 包括 http www nytimes
  • 如何在 PHP 中添加 href 链接? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我对 PHP 很陌生 并试图即时更新网站 我需要更新代
  • Python - Sqlite插入没有自动增量主键值的元组

    我创建一个带有主键和自动增量的表 with open RAND xml rb as f sqlite3 connect race db as connection c connection cursor c execute CREATE T
  • 计算多列每个字母的频率[重复]

    这个问题在这里已经有答案了 我有一个数据框如下 gt dfnew C1 C2 C3 C4 C5 C6 1 A A G A G A 2 A T T T G G 3 T A G A T A 4 C A A A A G 5 C A T T T C
  • SQLite iOS 插入数据

    我试图将一个名称插入到我的 sqlite 文件中 我正在使用此代码 但它不起作用 void InsertRecords NSMutableString txt if addStmt nil const char sql INSERT INT
  • 我需要使用 { get; 吗?放; } 具有在获取和设置时没有特殊操作的 C# 字段

    我一直在编写这样的类 public class ReportViewModel public string Status public string DataSource public String DataStore get set pu
  • 无限重复列表(用无限重复序列压缩有限列表)

    UserList是一个字典列表 例如 Name Alex Age 25 Name Peter Age 35 Name Muhammad Age 28 Name Raul Age 29 RowColorList是一个颜色列表 bcf fc0
  • 原型回调函数吞掉异常

    使用原型版本 1 6 0 2 我有一个常见的问题 异常在回调函数中抛出时被吞没 通常是当我尝试处理对Ajax Request称呼 这是一个简单的例子 HTML 标记