2012-04-04 85 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