jQuery异常处理

Bob*_*Bob 4 javascript jquery exception-handling

有什么办法可以在JavaScript中捕获任何未捕获的异常?我的意思是,我所有的“危险”代码都在try-catch块中。但是我没有明确处理的异常呢?我正在使用jQuery,我的主要javascript文件开头为:

$(document).ready(function(){})

在这里,我将一些事件绑定到某些DOM元素。我可以在这里使用try-catch块,但是它们将捕获在事件绑定过程中而不是在事件处理过程中发生的异常。但是,如果我在每个事件处理函数中都使用try-catch块,那将很丑陋。

我应该如何捕获显式try-catch块中未发生的异常?(我不想编写通用处理程序函数,我只想将问题发送到我的服务器)

Poi*_*nty 6

您可以编写一个将实际处理程序包装在try / catch中的函数

function tc(func, msg) {
  msg = msg || "Handler exception";
  return function(e) {
    try {
      return func(e);
    }
    catch (exc) {
      $.post( /* send exception to server? */ );
      throw exc; // let nature take its course
    }
  };
}
Run Code Online (Sandbox Code Playgroud)

(可能希望在参数处理等方面变得更奇特。)然后,在绑定处理程序时,您将执行以下操作:

$('#whatever').click(tc(function(e) {
  // your handler function
}, "This is the message sent to the server when this handler fails"));
Run Code Online (Sandbox Code Playgroud)

另外,如果您要确保this处理程序中的“ ”行为与以前相同,则可以执行func.apply($(this), e)而不是just func(e)