【问题标题】:Mootools - how to chain multiple jsonp requestsMootools - 如何链接多个 jsonp 请求
【发布时间】:2012-05-10 09:11:42
【问题描述】:

我正在使用 youtube api 来检索视频列表的信息。所以我必须使用 Request.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 from more - 我不希望它适用于 Request.JSONP 但你可以应用那里的原则来做你自己的排队。
  • @DimitarChristoff 它适用于 JSONP :) jsfiddle.net/pleasedontbelong/vyLq6/3 但是在使用 Request.Queue 时你必须小心,因为你在每个请求上都失去了类上下文(this),所以我不得不使用“ Request.Queue 上的 onComplete" 事件以将每个响应添加到 this.videosInfo 属性 :) 谢谢!如果您将评论作为响应,我很乐意将其标记为答案。

标签: javascript api mootools cross-domain jsonp


【解决方案1】:

您可能不应该禁用async,以免在 HTTP 请求和响应期间冻结 UI 线程。

Request.JSONP API 支持 onComplete 回调。

您可以通过让每个 onComplete 调用后续请求来链接请求而不会失去 AJAX 的异步特性。

【讨论】:

  • 是的,我也想过...我最终使用 Request.Queue 来管理请求,因此如果其中一个请求失败或花费太多时间,我不必担心: )
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
相关资源
最近更新 更多