在哪里捕获EVAL中抛出的异常

时间:2017-06-01 18:50:28

标签: javascript ajax eval

以下脚本使您可以运行一段javascript代码。 try / catch块正在捕获错误。

$(".gallery img");

但是,如果变量 try { var result = eval(script); } catch (e) { // do something meaningful } 包含例如AJAX调用,并且此ajax调用抛出异常(例如在success函数中),则此try / catch块不会捕获此异常...

script

问题:如何捕获ajax请求中抛出的异常?

1 个答案:

答案 0 :(得分:1)

我希望您了解使用eval的危险,如果没有,那里有很多好的文章可以解释为什么它不是一个好主意。

话虽如此,问题是成功回调是在catch块之后调用的。您需要在成功回调中添加try/catch块,或者您需要从更全局的角度处理错误。我能想到的一个想法是使用window.onerror事件。我在下面的示例中显示了与您的问题类似的内容,并且显示了可以捕获eval中抛出的错误的示例。



(function() {

  'use strict';

  window.addEventListener('error', e => console.log(`window.onerror: ${e.message}`));

  let script = `setTimeout(function() {
    throw new Error('Whoops!');
  }, 0);`;

  eval(script);

  script = `throw new Error('Whoops!');`;

  try {
    eval(script);
  } catch (e) {
    console.log(e.message);
  }

})();