2012-04-04 68 views
2

我试图从每个请求返回的每个成功响应递归ajax请求我会倾向于堆栈溢出吗?如果是这样,你有没有更好的方法来做到这一点?我的要求是最初执行一个ajax请求,如果没有完成返回的json执行另一个具有相同参数的ajax请求...等等,直到我得到一个完成标志。成功递归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); 
     } 
    }); 
} 

回答

5

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

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

+0

明白了..谢谢 – xxtommoxx 2012-04-04 21:14:03

+0

我在答复中增加了几个词。我的解释哪一部分你不明白?你了解异步ajax和它的工作原理吗? – jfriend00 2012-04-04 21:17:36