Javascript Mootools-如何链接多个jsonp请求
我正在使用youtube api检索视频列表的信息。所以我必须使用Request.JSONP类 我的问题是,我必须对youtube API进行多次调用,但我无法使其成为“链”。文档说我只需要添加选项Javascript Mootools-如何链接多个jsonp请求,javascript,api,mootools,cross-domain,jsonp,Javascript,Api,Mootools,Cross Domain,Jsonp,我正在使用youtube api检索视频列表的信息。所以我必须使用Request.JSONP类 我的问题是,我必须对youtube API进行多次调用,但我无法使其成为“链”。文档说我只需要添加选项link:'chain',并在同步模式下使用async:false(witch在简单的请求对象上运行良好) 这就是我尝试过的: var MyClass = new Class({ listVideos: [], videosInfo: [], initialize : func
link:'chain'
,并在同步模式下使用async:false
(witch在简单的请求对象上运行良好)
这就是我尝试过的:
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'])
这是你可以玩的游戏
基本上我想要的是在所有请求完成后处理videosInfo
数组
有什么想法吗
提前谢谢
PS:
我找到了一个“肮脏的解决方案”来解决我的问题,但如果其中一个请求失败,我一点也不觉得舒服。。它将全部失败您可能不应该禁用
异步
,以免在HTTP请求和响应期间冻结UI线程
API支持onComplete
回调
通过让每个
onComplete
调用后续的请求,您可以链接请求,而不会失去AJAX的异步特性。查看请求。更多信息中的队列-我不希望它适用于request.JSONP,但您可以将其原理应用于您自己的队列。@DimitarChristoff它适用于JSONP:)在使用Request.Queue时,您必须小心,因为您在每个请求上都失去了类上下文(this),因此我必须在请求上使用“onComplete”事件。Queue将每个响应添加到this.videosInfo属性:)谢谢!,如果你把你的评论作为回应,我很乐意把它作为答案。是的,我也想到了。。。我最终使用Request.Queue来管理请求,这样我就不必担心其中一个请求失败或花费太多时间:)