2016-11-18 16 views
0

2つの異なるXML要求からいくつかのデータを取得している場合、両方の要求が同時に行われると、どのようにして特定の作業を開始できますか?2つのXML要求の結果を同時に処理する方法

+0

あなたは私たちに何らかのコードを表示していませんが、私が示唆していることは約束を調べることです。 – Keith

答えて

1

あなたが解決している問題は、非同期タスクを調整することです。コールバックでこれを実現できます。
各要求が完了すると、すべての出力が処理されるコールバック関数が実行されるようにします。ここで

は、コールバックです:

function allDone(){ 
    if ! (completedRequests < totalRequests) return; 
    //If we get here, all calls are complete. 
    //Add code here to work on your retrieved XML data. 
} 

ここでは、XMLを取得カウンタをインクリメントし、allDone()を呼び出す例です。

function requestXML(url) { 
    var dataToReturn; 
    $.ajax({ 
     type: "GET", 
     url: "url", 
     cache: false, 
     dataType: "xml", 
     success: function(xml) { 
      dataToReturn=xml; 
      completedRequests += 1; //increment the count 
      allDone(); //call the callback 
     } 
    }); 
    return dataToReturn; 
} 

var totalRequests=2; //There are going to be two requests, but we could easily extend this number. 

var completedRequests=0; //here's the incrementing value 

//Here are the two requests 
var xml1=requestXML("xml_source1"); 
var xml2=requestXML("xml_source2"); 

allDone()は「totalRequests」回と呼ばれます。最後のものを除くすべての呼び出しは `allDone()から直ちに戻ります。最後に呼び出されると、すべての要求が完了するとコードが実際に実行されます。

マイケルケイの優れた点をこの解決策でより明確にするために、この回答をリファクタリングしました。

+0

ありがとうございます。 –

+1

N個のリクエストがある場合は、アイデアを明らかな方法で拡張するだけです(例:カウンタをNに初期化し、タスクが終了するたびにデクリメントする。 –

+0

もう一度ありがとうございます。 –

関連する問題