2015-06-27 26 views
1

我想使用YouTube API獲取我的所有YouTube訂閱。不過,Google會將API調用中返回的項目數量限制爲50.如果我訂閱了100多個頻道,我將不得不循環API調用以獲取所有項目。現在我只想在console中調試console.log()。JavaScript中的異步YouTube API調用

我做了很多關於如何在Javascript的循環中執行異步調用的閱讀,但所有這些都使用基本的for()循環。在使用YouTube數據API的情況下,您必須進行API調用,然後使用nextPageToken屬性獲取下一頁。

這是我目前popup.js文件:

$(document).ready(function() { 
    var ClientID = '[my client id]'; 

    $('#testBtn').click(function() { 
     chrome.identity.getAuthToken({"interactive": true}, function(token) { 

      GetInfo(token, ""); 

     }); 
    }); 

    function GetInfo(userToken, pageToken) { 

     $.ajax({ 
      url: "https://www.googleapis.com/youtube/v3/subscriptions", 
      type: 'GET', 
      data: { 
       part: "snippet", 
       mine: "true", 
       nextPageToken: pageToken, 
       access_token: userToken 
      }, 
      success: function(data) { 
       var allIds = ""; 
       $.each(data.items, function(i, item) { 
        console.log(item.snippet.resourceId.channelId); 
       }); 

       var nextPageToken = data.nextPageToken; 
       if (typeof nextPageToken !== 'undefined') 
       { 
        GetInfo(userToken, nextPageToken); 
       } 


      }, 
      error: function(xhr, status, error) { 
       console.log(xhr.responseText); 
      } 
     }); 
    } 
}); 

我知道,正常情況下你不應該做出popup.js API調用,但我只想得到這個工作,然後我把它挪走到後臺腳本。

這段代碼在執行時第一次工作的很好;執行成功功能並記錄通道ID。所以我知道這不是驗證問題。但是,success回調中再次調用GetInfo()函數時,參數data保持不變。所以我的腳本只是無限期地一次又一次地將數據記錄在第一個回調中。

我想說這是Javascript中的閉包問題,但我不知道ajax調用中的語法是什麼樣子。

如果有人可以幫忙,那太棒了!

+0

現在你必須改變客戶端ID(保存編輯歷史)。下次小心點。 – Xan

+0

@Xan哎呀,很好。我在第一篇文章中刪除了它,但是我編輯了代碼並忘記再次更改它。我會立即更改客戶端ID。 – GabeMeister

回答

2

根據the documentation參數 API的名稱是pageToken,而不是nextPageToken。您的nextPageToken參數可能會被API忽略,因此您一次又一次得到第一頁。所以你應該有:

 data: { 
      part: "snippet", 
      mine: "true", 
      pageToken: pageToken, 
      access_token: userToken 
     }, 
+0

當您發佈此信息時,我正在輸入一個對我的問題的答案!是的,你是對的。我搞砸了參數。現在一切正常。謝謝! – GabeMeister