我正在使用直接Web Remoting (DWR) JavaScript库文件,只在Safari(桌面和iPad)中得到一个错误

它说

超过最大调用堆栈大小。

这个错误到底是什么意思,它是否完全停止处理?

Safari浏览器也有任何修复(实际上是在iPad Safari上,它说

JS:执行超时

我认为这是相同的调用堆栈问题)


当前回答

几乎每个答案都说这只能由无限循环引起。这是不正确的,否则您可以通过深度嵌套调用溢出堆栈(并不是说这是有效的,但它肯定是在可能的范围内)。如果你可以控制你的JavaScript虚拟机,你可以调整堆栈大小。例如:

节点——时= 2000

请参见:如何在Node.js中增加最大调用堆栈大小

其他回答

如果您正在使用谷歌地图,那么检查lat lng是否被传递到新的google.maps. latlng是正确的格式。在我的例子中,它们被传递为未定义的。

在你的代码中有一个递归循环(例如,一个函数最终会一次又一次地调用自己,直到堆栈满为止)。

其他浏览器要么有更大的堆栈(所以您会得到一个超时),要么因为某种原因(可能是放置错误的try-catch)而忽略错误。

发生错误时,使用调试器检查调用堆栈。

我在express/nodejs应用程序中得到了这个错误,当MongoDB数据库的模式和我们创建的模型不匹配时。

有趣的是,没有人提到异步函数中的等待调用。在我的例子中,我有超过1.5 MB的循环和数据库交互文件。

async function uploadtomongodb() {

    await find('user', 'user2', myobj0).then(result => {
    }

})

等待将删除“超过最大调用堆栈大小”。否则内存负载过多。不确定Node是否可以处理超过700行和对象。

我也面临着同样的问题 我已经通过删除在ajax上使用了两次的字段名来解决它 如

    jQuery.ajax({
    url : '/search-result',
    data : {
      searchField : searchField,
      searchFieldValue : searchField,
      nid    :  nid,
      indexName : indexName,
      indexType : indexType
    },
.....