2011-07-17 11 views
0

$(document).readyイベントで3つのjQuery ajax呼び出しを発行するWebページを作成しています。そして、Webページは、これらの3つの呼び出しの応答を、先着順で基本的にマージします(たとえば、最初に返された場合は1と3をマージし、返された場合は1または3のいずれかで応答2をマージします)。先着順で複数のjQuery ajaxコールのレスポンスをマージしますか?

これを実装する方法は?変数を使用してAjaxのコールステータスを保存する場合、レースを避けるにはどうすればよいですか?

答えて

0

すべての応答がすべての状態を見ることができる(競合状態がない)場合は、応答ごとに状態を格納する場所を個別に作成する必要があります。それから、各ajax呼び出しの完了時に、あなたはすでに完了しているものをチェックします。レスポンスを表示するのに十分な完成度があれば、それを処理し、残りのajaxレスポンスに必要な新しい状態を設定します。

var ajaxResponses = [null, null, null];  // response values for 3 ajax calls 
var ajaxProcessed = [false, false, false]; // keep track of which values have been merged 
var ajaxMergeResult = null;     // what's been merged so far 

その後、各AJAX呼び出しのための各補完関数は、配列の中にそれが応答データです入れ、その後に見えるdoMerge()関数を呼び出すことができます:あなたのコードの構造を知らない、これを実行する最も簡単な方法は、単純な配列になりますこれまでに受け取った状態で、仕事を終わらせるか、仕事をするための十分な事前データがあるかどうかをチェックする。それはいくつかの仕事をしているが、すべての呼び出しがまだ行われていない場合は、最後に完了したときにdoMerge()への次の呼び出しがこれまでに何が行われたかを知っているので、 。

0

JavaScriptはレーシングがありません。JavaScriptはパラレルではないためです。 HTTPリクエストに関しては、の非同期という全く別のものです。行わ

var responses = []; 
var urls = ["url1", "url2", "url3"]; 

for (var i=0, j=urls.length; i<j; i++) { 
    $.ajax({ 
    url: urls[i], 
    success: function (data) { 
     responses.push(data); 
    } 
    }); 
} 

を:それはにつれて

まず最初に仕え、来るは、直フォワードです。

関連する問題