2012-04-30 5 views
0

私は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/に「汚いソリューション」を見つけたが、私は、要求のいずれかに障害が発生した場合...それは意志、全くそれで快適に感じることはありませんすべて失敗する

+0

もっと見るからRequest.Queueを見てください - 私はそれがRequest.JSONPのために働くとは思っていませんが、独自のキューイングを行うためにそこに原則を適用できるかもしれません。 –

+0

:私はそれを試してみます – pleasedontbelong

+0

@DimitarChristoffそれはJSONPで動作します:) http://jsfiddle.net/pleasedontbelong/vyLq6/3/しかし、Request.Queueを使うときは、クラスコンテキストを失うので注意しなければなりません(これは)毎回のリクエストで、Request.Queueで "onComplete"イベントを使用して、各応答をthis.videosInfo属性に追加する必要がありました:)ありがとうございました!あなたのコメントを返信するとうれしいですそれを答えとしてマークします。 – pleasedontbelong

答えて

1

asyncを無効にしないでください.HTTPリクエストとレスポンスの間UIスレッドをフリーズしないでください。

Request.JSONP APIは、onCompleteコールバックをサポートしています。

onCompleteに後続のリクエストを呼び出すことによって、AJAXの非同期性を失うことなくリクエストをチェーンすることができます。

+0

yeap私はそれについても考えていました...リクエストを管理するためにRequest.Queueを使用してしまったので、リクエストが失敗したり、時間がかかり過ぎても心配する必要はありません。 – pleasedontbelong

関連する問題