2017-05-16 11 views
0

私のプラグインでは、次の応答が以前のものに依存するため、順番にajax呼び出しと応答を行いたいと思います。 残念ながら、応答は呼び出し順序と一致しません(私はasyncを使用したくありません:false)ので、このことを処理する必要があります。Jquery ajaxが順番に応答を行います

var array = ['a', 'b', 'c', ...]; <- dynamic values 
var params = ['foo', 'bar', 'doe', ...]; <- dynamic values 
var postData = {}; 

$.each (array, function (idx, val) { 
    postData.value = val; 
    var param = params[idx]; 
    ajaxRequest(param, callback); 
}); 

var ajaxRequest = function (param, callback) { 
    $.ajax ({ 
     url: url, 
     data: postData, 
     type: "POST" 
    }).done (function (data) { 
     //a returned data in 5 sec 
     //b returned data in 3 sec 
     //c returned data in 1 sec 
    }); 
} 

私はAjaxの約束についてのいくつかのものを読んで、延期が、私はIFを知らないとどのようにそれは私がこれを行うことができますどのように私のシナリオ
のための正しい解決策になることができていますか?

答えて

1

このコールバックは要求が正常に完了するまで実行されないため、ajax要求の "done"機能を使用して順番に連鎖させることができます。このような何か(未テスト):

var arr = ['a', 'b', 'c', ...]; 
var params = ['foo', 'bar', 'doe', ...]; 
var arrIndex = 0; 

function ajaxRequest() { 
    console.log("Request " + arrIndex + " starting"); 
    var postData = { value: arr[arrIndex] }; 
    var param = params[arrIndex]; 

    $.ajax ({ 
     url: url, 
     data: postData, 
     type: "POST" 
    }).done (function (data) { 
     console.log("Request " + arrIndex + " completed"); 
     arrIndex++; 
     if (arrIndex < arr.length) { 
     ajaxRequest(); 
     } 
     else { 
      console.log("All requests completed"); 
     } 
    }); 
} 

あなたは一例でそれを使用していないようですので、私は、「PARAM」の目的が何であるかわからないんだけど、私はそれを残してきましたあなたが実際にそれを必要とする場合に備えて。 「コールバック」は何もしていないようだったので、私はそれを無視しました。

また、特定のリクエストが失敗した場合の対処方法も考えています。あなたは続行できないと想定しているため、エラーを記録する必要がありますが、残しておきます。

+0

お返事ありがとうございますが、問題は各ループからajaxrequestを呼び出してコードを処理する方法です。私が省略したパラメータとコールバックは、私のコードでは重要です。 –

+0

このロジックは各ループと同等です。本質的に、 "ajaxRequest()"への各呼び出しは "ループ"の1回の反復に相当し、カウンタ(arrIndex)は毎回手動でインクリメントされます。私はあなたが見ているように "params"オブジェクトを保持していますので、自分でそれをどうする必要があれば追加することができますが、私はそれがどのように定義されていないか、それをどのように/どこに含めるべきかを知ることは困難でした。あなた自身で戻すこともできますし、もっと説明することで、論理的にこれを試すこともできます。 – ADyson

+0

私はその論理を理解しています。この方法でプラグインを処理する方法を変更する方法を調べる必要があります。コールバックは、完了要求を定義する必要があります。この場合、約束して延期することはできません。ありがとう –

関連する問題