我正在尝试在每个请求返回的每个成功响应时递归地发出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);
}
});
}
答案 0 :(得分:5)
这实际上不是递归,所以不存在堆栈溢出的危险。它可能看起来像递归,但由于ajax调用是异步的,因此go()
函数只启动ajax调用,然后{j}调用正在进行时go()
函数立即完成。因此,在go()
函数已经完成之后很久就调用成功处理程序。所以,它实际上不是递归,也没有堆栈累积。
它可能看起来像代码的视觉效果的递归,但因为ajax调用是异步的,并且在go()
函数返回后很久就调用了成功处理程序,所以没有堆栈构建。