2016-06-11 9 views
1

3日間、私のコードでJQueryの遅延メソッドを使用する方法を見つけようとしていますが、残念ながら解決策を見つけることはできません。各ループからの遅延リクエストAjax

私は2つの機能を持っています。 最初の1つはinit_itemsアイテムのリストを取得するための最初のajaxリクエストを送信し、ループはそれらのアイテムの名前を使用してアイテムに関する詳細を取得するために他のリクエストを送信します。 このように、最初のリクエストが完了したら、次のリクエストを開始します。

クリック時に呼び出される2番目の機能では、データを取得する前に、最初の機能が完了した(すべての要求が完了した)ことをシステムが待機するようにします。

function init_items(id) { 

     $.when(
      $.ajax({ 
       async: false, 
       data: { type : type, name : domain }, 
       type: 'GET', 
       url: 'select_items.php' 
      }).done(function (data) { 

      var promises=[]; 

      $.each(JSON.parse(data), function(k,v) { 

       var code = v.code; 

       getCurrentItem(code); 

       var req = $.get("get_groups.php", { id: id }).done(function(data1) { 

       res = JSON.parse(data1); 
       global_news[domain] = res; 

       promises.push(req); 
      }); 

      return $.when.apply(null, promises).done(function(){ 
       console.log('done 1'); 
      });    
     });  
    } 

    $("button[name='refresh_value']").on("click", function() { 

     var id = $("select[name='id']").val(); 

     $.when(init_items(id)).done(function(n){ 
      console.log(n.num); 
      console.log('all set'); 
     }); 
}); 

は現在、ボタンのクリックで、init_items起動機能が、それは情報を表示するには、結果を待ちません。

私は多くのケースを大声で、延期し、約束していますが、私はこの問題を解決していません。

誰かがアイデアを持っていますか?私は本当にあなたの助けに感謝します。

ベスト、

サム

+0

)連鎖に 'done'の代わりに' then'を使用する必要があります。できるだけどこでも 'done'を避けてください。 b)中括弧がインデントに一致しない。あなたが正しいことをしようとしたようですが、あなたが書いたコードはそれをしません。内側の 'done'のコールバックがどこで/どこで終わるのかは分かりません。 – Bergi

+0

'domain'は定数であり、' getCurrentItem(code) 'のようなものはnomanslandで浮動します。 –

答えて

0

みんなありがとう。 私は解決策を見つけました。私は2つの関数で関数を分けた。 最初のリクエストが完了すると、2番目のリクエストを呼び出して、約束で宣言されたリクエストを開始します。

関連する問題