2010-12-11 14 views
3

私は$.post()の要求を行うウェブアプリケーションを持っています。サーバーは、作成された順にこれらを受信する必要があります。これを保証するために、私は、前回のAjaxコールがデキューされ、それを完了した後でAjaxコールを開始した自分自身のキューを作成することを最初に考えました。同期Ajax with jQuery

次に、async:falseオプションがあり、それには$.ajax()を使用できます。

$.ajax({ async: false, ... })の使用をすべて変更しましたが、Firebugでそれらを監視すると、1つずつリクエストが送信されず、最後のリクエストが応答を受信した後に起動されます。

asyncとは何でしょうか?どのように私はAjaxをパイプして、一度に1つずつ実行し、次のものが最後のものが完了したときに発砲する(応答を受け取った)のだろうか?

答えて

7

async:falseの代わりに、コールバックから再帰的に呼び出される関数を作成できます。そこで、基本的

function sendReq(arr) { 
    var current = arr.shift(); // Remove the first item from the Array. 
    $.ajax({ 
     url: current.url,  // Use the url from the first item. 
     success: function(dat) { 
      current.func(dat); // Call the function of the first item. 
      if(arr.length)  // If there are items left in the Array, 
       sendReq(arr); //  make a recursive call, sending 
     }       //  the remainder of the array. 
    }); 
} 

// Ordered collection of requests to be made. 
var req_set = [ 
    {url:'someurl', func:function(dat) { /*do something with dat*/ }}, 
    {url:'anotherurl', func:function(dat) { /*do something with dat*/ }}, 
    {url:'someother', func:function(dat) { /*do something with dat*/ }} 
]; 
// Start the first call, sending the entire set. 
sendReq(req_set); 

  • が要求のために必要な要素を含むオブジェクトの配列を作成します。
  • 配列を受け入れる関数を作成します。
  • この関数は、最初の項目を配列から削除し、そのオブジェクトを使用して要求のプロパティを設定します。
  • コールバックで、その項目の関数が呼び出された後、関数の再帰呼び出しを行い、残りの配列を渡します。
  • これは、配列が空になるまで再帰呼び出しを継続します。