【问题标题】:jQuery catch "RangeError: Maximum call stack size exceeded"jQuery 捕获“RangeError:超出最大调用堆栈大小”
【发布时间】:2012-08-15 23:09:21
【问题描述】:

我有一个页面,可以在 FF 和 IE 中正常工作。但是,chrome抛出

jquery.min.js:2    Uncaught RangeError: Maximum call stack size exceeded

这是因为试图处理大量数据(请参阅Chrome RangeError: Maximum call stack size exceeded when using jQuery $.map)。

是否可以catch报错,让整个页面的javascript不挂起?还是我必须减少chrome的数据量。

【问题讨论】:

  • 我怀疑这与尝试处理大量数据有关;另一个问题没有答案,我怀疑这也是那里的问题。您没有发布任何代码,因此无法说出发生了什么。
  • 代码中没有递归。我认为无限递归也会使其他浏览器崩溃。事实是,即使是 ie7 在这种情况下也比 webkit 处理得更好。此外,问题不是关于帮助我,而是关于能够抓住RangeError。我不明白反对票...
  • 您没有发布任何代码。你说没有递归,但这显然是问题的最可能原因。
  • 好吧,我并不是要直接解决我的问题,而是要看看是否有可能在全局范围内捕获错误。这就是问题所在,如果您阅读了最后一段。
  • @PetrMarek 当然:try..catch 或 window.onerror。但是,除了解决问题之外,您还希望从中得到什么?

标签: javascript jquery google-chrome chromium


【解决方案1】:

JavaScript 不支持尾递归。您可能正在从一个函数调用一个函数,直到它发生故障。 (请发布一些代码以显示您在做什么)。

在“迭代”之间使用 setTimeout。这样您就不会阻塞 UI 或炸毁堆栈。

【讨论】:

  • 简单的迭代永远不会耗尽堆栈。
  • @Pointy 正确!我不是说简单的迭代。更新了我的答案以更好地解释它。
  • 我在关闭按钮 jQuery(this).attr("href", "#"); jQuery(this).trigger("click"); jQuery(this).attr("href", "#!");
猜你喜欢
  • 2013-05-17
  • 1970-01-01
  • 2012-03-30
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 2014-08-01
相关资源
最近更新 更多