Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mootools-如何链接多个jsonp请求_Javascript_Api_Mootools_Cross Domain_Jsonp - Fatal编程技术网

Javascript Mootools-如何链接多个jsonp请求

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

我正在使用youtube api检索视频列表的信息。所以我必须使用Request.JSONP类

我的问题是,我必须对youtube API进行多次调用,但我无法使其成为“链”。文档说我只需要添加选项
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来管理请求,这样我就不必担心其中一个请求失败或花费太多时间:)