私はyoutube apiを使ってビデオリストの情報を取得しています。だから私は、Request.JSONPクラスを使用する必要があります。Mootools - 複数のjsonpリクエストをチェーンする方法
私の問題は、YouTube APIを複数呼び出す必要があり、私はそれを「チェーン」にすることができないということです。私が必要とするのは、オプションlink:'chain'
を追加して、同期モードでasync:false
を使用することです(簡単なRequestオブジェクトでうまく動作します)。
これは私が試したものです:
var MyClass = new Class({
listVideos: [],
videosInfo: [],
initialize : function(listVideos){
this.listVideos = listVideos;
this.getVideosInfo();
},
getVideosInfo : function(){
var request = new Request.JSONP({
callbackKey: 'callback',
link : 'chain',
async : false,
onComplete: function(data){
this.videosInfo.push(data.entry);
console.log(this.videosInfo);
}.bind(this)
});
this.listVideos.each(function(videoId){
request.options.url = 'http://gdata.youtube.com/feeds/api/videos/' + videoId + '?v=2&alt=json-in-script&format=5';
request.send();
});
console.log("this should be displayed AFTER the requests, not BEFORE u_u");
console.log(this.videosInfo);
}
});
var test = new MyClass(['AJso1SJT7Js','hlO5UBxuJlY'])
ここjsfiddleだので、あなたは
N_Nそれで遊ぶことができます基本的に私が何をしたいすべての要求が完了した後videosInfo
配列を処理することです。
すべてのアイデア?事前に
おかげ
PS: は、私は私の問題、http://jsfiddle.net/pleasedontbelong/gLF5h/1/に「汚いソリューション」を見つけたが、私は、要求のいずれかに障害が発生した場合...それは意志、全くそれで快適に感じることはありませんすべて失敗する
もっと見るからRequest.Queueを見てください - 私はそれがRequest.JSONPのために働くとは思っていませんが、独自のキューイングを行うためにそこに原則を適用できるかもしれません。 –
:私はそれを試してみます – pleasedontbelong
@DimitarChristoffそれはJSONPで動作します:) http://jsfiddle.net/pleasedontbelong/vyLq6/3/しかし、Request.Queueを使うときは、クラスコンテキストを失うので注意しなければなりません(これは)毎回のリクエストで、Request.Queueで "onComplete"イベントを使用して、各応答をthis.videosInfo属性に追加する必要がありました:)ありがとうございました!あなたのコメントを返信するとうれしいですそれを答えとしてマークします。 – pleasedontbelong