2

我试图在每个请求返回的每个成功响应上递归地发出 ajax 请求我是否容易出现堆栈溢出?如果是这样,您有更好的方法吗?我的要求是最初执行一个 ajax 请求,如果返回的 json 没有完成,则执行另一个具有相同参数的 ajax 请求......等等,直到我得到一个完成标志。

go: function (r) {
    Ext.Ajax.request({
        url: 'bleh',
        success: function (response) {
            var data = Ext.decode(response.responseText); // decode json into object
            r.update();
            if (!data.isDone) go(r);
        }
    });
}
4

1 回答 1

5

这实际上不是递归,因此没有堆栈溢出的危险。它可能看起来像递归,但是因为 ajax 调用是异步的,所以您的go()函数只启动 ajax 调用,然后在go()ajax 调用正在进行时函数立即结束。因此,成功处理程序在go()函数完成后很长时间才被调用。所以,它实际上不是递归,也没有堆栈堆积。

从代码的视觉效果来看,它可能看起来像是递归,但因为 ajax 调用是异步的,并且成功处理程序是在go()函数返回后很长时间才调用的,所以没有堆栈堆积。

于 2012-04-04T21:11:59.553 回答