递归阿贾克斯成功后(Recursive Ajax Upon Success)

2019-09-16 08:16发布

我想帮一帮从每个请求返回我会容易发生堆栈溢出每个成功响应递归一个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);
        }
    });
}

Answer 1:

这实际上不是递归所以没有堆栈溢出的危险。 它可能看起来像递归,但因为Ajax调用是asycnchronous,你go()函数只启动Ajax调用,然后go()函数结束马上,而Ajax调用正在进行中。 因此,成功处理程序被调用后不久go()函数已经完成。 因此,它实际上没有递归并没有堆栈堆积。

它可能看起来像从代码的视觉效果递归,但因为Ajax调用是异步的,成功处理程序被称为长后go()函数返回,没有堆堆积。



文章来源: Recursive Ajax Upon Success