递归Ajax成功

xxt*_*oxx 2 javascript ajax extjs

我试图在每个请求返回的每个成功响应时递归地发出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);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 5

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

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