2012-04-04 10 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呼び出しがasynnchronousであるため、go()関数はajax呼び出しを開始するだけで、ajax呼び出しが実行されている間にすぐにgo()関数が終了します。したがって、成功ハンドラは、go()関数が既に終了してから長く呼び出されます。したがって、実際には再帰ではなく、スタックの蓄積もありません。

コードのビジュアルエフェクトから再帰的に見えるかもしれませんが、ajax呼び出しが非同期で、成功ハンドラがgo()関数が返されてから長く呼び出されるため、スタックビルドアップはありません。

+0

ありがとう – xxtommoxx

+0

私は私の答えにいくつかの単語を追加しました。私の説明のどの部分を理解していないのですか?非同期Ajaxとその動作方法を理解していますか? – jfriend00

関連する問題