2015-04-25 35 views
3

我有2個問題。我的最終目標是向Instagram發出請求並通過標記過濾圖片。 Instagram一次不允許超過33張圖片,所以現在我在另一張圖片裏放了一個ajax。第一個請求獲取圖像,然後檢查是否還有更多,如果有更多的請求發出。所以這是我的兩個問題。jQuery結合來自Instagram的Ajax對象API

#1 - 我無法將這兩個對象合併爲1。我嘗試了所有我能想到的或在網上找到的東西。

var new_data = $.extend({}, data, data2); 

$.extend(data, data2); 

不工作,它只是給我的對象的1回

#2 - 下面我的邏輯是有點瑕疵,因爲這隻會讓我最多可獲得66張圖像(每張請求2張,每張33張)。我真正需要的是讓ajax進入某種循環。但我不知道該怎麼做。

var userid = '#######'; 
var token = '############'; 
var url = 'https://api.instagram.com/v1/users/' + userid + '/media/recent/?access_token=' + token + '&count=33'; 

$.ajax({ 
    type: 'GET', 
    dataType: 'jsonp', 
    cache: false, 
    url: url, 

    success: function(response){ 
     var paging = response.pagination; 
     var data = response.data; 
     console.log(data); 

     if(paging.hasOwnProperty('next_url')){ 

      url = paging.next_url; 

      $.ajax({ 
       type: 'GET', 
       dataType: 'jsonp', 
       cache: false, 
       url: url, 
       success: function(response2){ 
        var data2 = response2.data; 
        var new_data = $.extend({}, data, data2); 
       } 
      }); 

     }else{ 
      // No more images so create image gallery 
     } 
    }, 
    error: function(){ 
     // error stuff 
    } 
}); 

以下是我從Instagram的

找回

enter image description here

+0

已編輯。它現在應該工作 –

+0

你解決了你的問題嗎?如果可以的話,請標記我的答案,因爲我付出了很多努力。謝謝 –

回答

2

測試的樣品。有用。嘗試

var imageData = []; 
$(function() { 
    var url = 'https://api.instagram.com/v1/tags/smpspree/media/recent/?client_id=81e3d3f35c8a4438964001decaa5a31f&count=11'; 

    getData(url, function() { 
     for (var i in imageData) { 
      console.log(imageData[i]) 
     } 
    }); 

    function getData(url, callback){ 
     $.ajax({ 
      type: 'GET', 
      dataType: 'jsonp', 
      cache: false, 
      url: url, 
      success: function(response){ 
       console.log(response.data) 
       imageData = imageData.concat(response.data) 
       var paging = response.pagination; 
       if (paging.hasOwnProperty('next_url')) { 
        getData(paging.next_url, callback) 
       } else { 
        callback.call(); 
       } 
      } 
     }); 
    } 

}) 
+0

是的,Instagram只讓你得到33,但默認爲20,所以33就是將它設置爲最大。在你的代碼示例中,我收到了錯誤,其中一條是你錯過了(在你之後,如果不知道其他錯誤是什麼, – RiddleMeThis

+0

如果錯誤和next_url錯誤會被修復,你會得到什麼樣的錯誤? –

+0

它與images.push response.data),我相信它說圖像不是一個功能 – RiddleMeThis

0

如果您嘗試連接兩個陣列的元素,那麼您錯誤地使用了$.extend

#1爲了積累數組的內容,請使用Array.prototype.concat函數。 實施例:

var new_data = data.concat(data2); 

注:$.extend用於合併內容。見http://api.jquery.com/jquery.extend/

#2 Instagram在其所有響應中都包含分頁鍵。你可以在回調中使用它來觸發另一個Ajax請求。請參閱分頁 in https://instagram.com/developer/endpoints/

注意:速率限制適用:驗證呼叫的每個令牌5,000 /小時。請參閱https://instagram.com/developer/limits/

+0

OMG感謝你的號碼#1 - 我沒有意識到這些對象是在一個數組中,我嘗試了所有我需要的方法來加入對象,我可以找到加入這兩個數組!你的意思是「在我的回調函數中」?你是說我不需要像我一樣的多個Ajax電話? – RiddleMeThis

+0

可以給我一個如何使用回調函數的例子,我無法弄清楚 – RiddleMeThis