2017-01-23 36 views
0

私はAJAX呼び出しでグラフを作成するload_graphs関数を持っています。複数のAJAXを同じ関数を呼び出して呼び出す

load_graphs関数は、次のように、異なる領域に対してピリオドを生成するために複数回呼び出される必要があります。

呼び出しはラッパー関数を使用して順次実行されますが、呼び出しは非同期です。同じAJAX関数をどのように呼び出すことができますか?

function load_all_graphs(){ 
    load_graphs('national','','container-natl-rates','container-natl-counts') 
    load_graphs('division','Western','container-west-rates','container-west-counts') 
} 

load_all_graphs() 


var load_graphs = function(scope, scopeFilter, chart_1, chart_2){ 
      d = new Date() 
      starttime = d.setMonth(d.getMonth()-1) 
      starttime = d.setDate(d.getDate()-1) 
      endtime = (new Date).getTime() 
      // console.log('starttime == ', starttime) 
      // console.log('endtime == ', endtime) 
      if (scope == 'national'){ 
       url = 'http://99.88.53.222:8081/vp.0.1-SNAPSHOT/Metrics?scope='+ scope + '&interval=day&startTime='+starttime+'&endTime='+ endtime 
      }else { 
       url = 'http://99.88.53.222:8081/vp.0.1-SNAPSHOT/Metrics?scope=' + scope + '&scopeFilter=' + scopeFilter + '&interval=day&startTime='+starttime+'&endTime='+ endtime 
      } 
      if (scopeFilter == ''){ 
       data_filter = 'national' 
      } 
      else if (scopeFilter == 'Western'){ 
       data_filter = 'Western' 
      } 

      $.ajax({type:'GET', 
       url: url,    
       // async: false,   
       success: function(data){      
        // console.log(JSON.stringify(data)) 
        // console.log(data) 
        $.each(data,function(i,x){      
         console.log('national == ', x[0]['X1'])             
         console.log('national data_filter == ', data_filter)             
         console.log('national == ', x[0]['X1'][data_filter])             

         for (var i = 0; i <= 10; i++) 
         { 
          error_counts_results[i] = [] 
         } 
         $.each(x[0]['X1'][data_filter], function(unix_date,data){         
          if (parseFloat(unix_date)){ 
           $.each(error_constants, 
            function(ix,error_item){ 
             // console.log(ix) 
             // console.log(data[error_item]) 
             error_counts_results[ix].push([parseInt(unix_date),data[error_item]]) 
            } 
           ) 
          // console.log('result == ', JSON.stringify(error_counts_results)) 
          }       
         }) 
        }) 
        seriesOptions[0] = { 
         name: error_constants[5], 
         data: error_counts_results[5] 
        }; 
        console.log('option 1 == ', seriesOptions[0]) 
        seriesOptions[1] = { 
         name: error_constants[0], 
         data: error_counts_results[0] 
        }; 
        console.log('option 2 == ', seriesOptions[1]) 
        seriesOptions[2] = { 
         name: error_constants[3], 
         data: error_counts_results[3] 
        }; 
        console.log('option 3 == ', seriesOptions[2]) 
        params = { 
         'title':'National' 
         ,'y2axis':'pct' 
        }         
        createChart_National(chart_1,params); 
        seriesOptions[0] = { 
         name: error_constants[4], 
         data: error_counts_results[4] 
        }; 

        seriesOptions[1] = { 
         name: name, 
         data: error_counts_results[1] 
        }; 

        seriesOptions[2] = { 
         name: name, 
         data: error_counts_results[2] 
        }; 
        params = { 
         'title':'National' 
         ,'y2axis':'cnt' 
        }         
        createChart_National(chart_2,params); 

       },     
      }) 

     } 
+0

を開始するには良い場所であるあなたは、アンギュラ使用しています何が問題なのですか?あなたはそれらを待っていますか? –

+0

非同期呼び出しを連鎖させるという約束について読んでください。 –

+0

@DanielBその質問は、ジェネリック関数を1つずつ呼び出すことを勧めました。私は同じことを実装しましたが、それでも非同期と呼ばれていました。 – user1050619

答えて

0

ajax呼び出しを一緒に連鎖させるという約束を使うことができます.jQueryにはすでにajax関数が組み込まれています。

$.ajax({ // ... }) 
.then (function (arg) 
{ 
    // do something with arg 
}) 
.then (function(){ 

    return $.ajax({ }); // second ajax call, return the promise 

}) 
.done (function(args) 
{ 
    // do something with your final result 
}); 

あなたは一般的にpromise.all

を使用してに並列表情でリクエストを実行したい場合は、私はここに、約束について読んで推薦はhttp://dailyjs.com/2014/02/20/promises-in-detail/

関連する問題