jquery の ajax 通信で json データを複数同時に取得したい
jqueryのajax通信にてjsonデータを複数同時に取得する関数を作成したいと考えております
URLとパラメータの連想配列を配列request
に格納し、
格納されている分だけgetDataMultipul
メソッドにて実行
全て取得した後に、処理を続行させる形の作りを検討しているのですが、
when
で並列実行する方法と
その結果を一度に取得し、配列に格納する方法が思いつかずやなんでおります。
何かいい方法ご存知でしたらご教授いただけませんでしょうか?
宜しくお願いいたします。
var request = [
{"url":"URLその1","params":{パラメータ1}},
{"url":"URLその2","params":{パラメータ2}},
{"url":"URLその3","params":{パラメータ3}},
・・・
]
getDataMultipul(request).done(
function(data){
//成功時の処理
}
).faile(function(){
//失敗時の処理
});
function getJson(request,params){
var defer = $.Deferred();
$.ajax({
url : request,
type : 'POST',
data : JSON.stringify(params),
contentType : 'application/json',
dataType : 'json',
success : defer.resolve,
error : defer.reject,
timeout : TIMEOUT
});
return defer.promise();
}
function getDataMultipul(arr){
var defer = $.Deferred();
$.when(
//配列に入っているURLとパラメータでデータを取得
getJson(arr[0]["url"],arr[0]["params"]),
getJson(arr[1]["url"],arr[1]["params"]),
getJson(arr[2]["url"],arr[2]["params"]),
…
).done(function(ret1,re2,re3・・・){
//配列分全ての処理が完了したらresolve
var returns = [
ret1,
ret2,
ret3,
…
]
defer.resolve(returns);
}).fail(function(){
defer.reject() ;
})
return defer.promise();
}
追記
Jqueryは2系、ECMA5.1にて開発を行っております。