递归Ajax成功

时间:2012-04-04 21:05:21

标签: 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);
        }
    });
}

1 个答案:

答案 0 :(得分:5)

这实际上不是递归,所以不存在堆栈溢出的危险。它可能看起来像递归,但由于ajax调用是异步的,因此go()函数只启动ajax调用,然后{j}调用正在进行时go()函数立即完成。因此,在go()函数已经完成之后很久就调用成功处理程序。所以,它实际上不是递归,也没有堆栈累积。

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