我需要通過AJAX調用YouTube API來檢索JSON格式的檢索視頻信息。jQuery - 異步執行
每個調用都可以同步處理,但是一旦所有數據都被接收到,它就需要被處理\顯示。
如何確保在收到所有數據之前不會調用處理函數?我目前的解決方案是遞歸調用AJAX函數,但我覺得有更好的解決方案。
任何幫助將被大大提升。
var categoryWrapper,categories;
var catCnt=0;
function initialiseVideoLibrary() {
categories=new Array("health","hiv","education","volunteering");
getYouTubeData();
}
function getYouTubeData() {
ytJsonUrl = "https://gdata.youtube.com/feeds/api/users/vsomediauk/uploads/-/" + categories[catCnt] + "?v=2&alt=jsonc&max-results=5&orderby=relevance";
$.ajax({
type: "GET",
url: ytJsonUrl,
cache: false,
dataType:'jsonp',
success: function(ytJsonResponse){
if (catCnt < categories.length) {
showCategory(categories[catCnt],ytJsonResponse);
getYouTubeData();
catCnt++;
} else {
tabVideos();
}
}
});
}
function showCategory(cat,ytResponse) {
categoryWrapper = $('<div></div>').addClass('category');
$(categoryWrapper).append($('<h3></h3>').text(cat));
contentDiv = $('<div></div>').addClass('content');
$.each(ytResponse.data.items,function(i,video) {
videoWrapper = $('<div></div>').addClass('video');
$(videoWrapper).append($('<p></p>').text(video.id));
$(videoWrapper).append($('<p></p>').text(video.title));
$(videoWrapper).append($('<img></img>').attr('src',video.thumbnail.sqDefault));
$(contentDiv).append(videoWrapper);
});
$(categoryWrapper).append(contentDiv);
$("#videolist").append(categoryWrapper);
}
function tabVideos() {
$("#videolist").tabulation({tabAlignment : "right", titleTag : "h3", tabPosition : "top"});
}