我正在使用YouTube YouTube API來檢索視頻列表的信息。所以我必須使用Request.JSONP類。Mootools - 如何鏈接多個jsonp請求
我的問題是我必須對youtube API進行多次調用,並且無法使其「鏈」。該文檔說,我需要的只是添加選項link:'chain'
並使用async:false
同步模式(女巫適用於簡單的請求對象)。
這是我已經試過:
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,但您可能能夠將原則應用於您自己的排隊。 –
:O我會試試 – pleasedontbelong
@DimitarChristoff它與JSONP一起工作:) http://jsfiddle.net/pleasedontbelong/vyLq6/3/但是,當使用Request.Queue時,你必須小心,因爲你放棄了類的上下文(this),所以我不得不使用Request.Queue上的「onComplete」事件來將每個響應添加到this.videosInfo屬性:)謝謝!,如果你把你的評論作爲迴應,我會很高興將其標記爲答案。 – pleasedontbelong