Instagram API分页:存储返回的数据

时间:2014-12-28 04:35:50

标签: javascript api rest pagination instagram

我通过Instagram API修改了分页;但是,我对如何通过递归调用存储返回的数据感到有些困惑。

我想将所有项链接存储在数组中,但我当前的方法返回一个空数组。

var collected_objs = []; // Array to collect links (urls)

$(document).ready(function() {
    $('#fetch_followers').click(function() {
        pollInstagram('https://api.instagram.com/v1/users/3/media/recent/?callback=?&min_timestamp=1388563200&max_timestamp=1420099200&access_token={access_token}', 33);
    });
});

function pollInstagram(next_url, count) {
$.ajax({
    method: "GET",
    url: next_url,
    dataType: "jsonp",
    jsonp: "callback",
    jsonpCallback: "jsonpcallback",
    success: function(data) {

        $.each(data.data, function(i, item) {
            $("#log").val($("#log").val() + item.id + '\n');
            console.log("****************************");
            console.log("This " + JSON.stringify(item.link));
            console.log("****************************");
            $('#target').append('<div id="likes_info"><a href="'+item.link+'"><img src="'+item.images.thumbnail.url+'"/></a>'+"<p><span>"+item.likes.count+"</span></p></div>");

            collected_objs.push(item.link); // Adding urls to collected_objs -- Not Working
        });
        $("#log").val($("#log").val() + data.pagination.next_url + '\n');

        // If the next url is not null or blank:
        if( data.pagination.next_url && count <=50 ) {
            var n_url=data.pagination.next_url + "&callback=?";
            pollInstagram(n_url, ++count);
        }
    },
    error: function(jqXHR, textStatus, errorThrown) {
        //alert("Check you internet Connection");
        $("#log").val($("#log").val() + 'Error\n');
    }
});

}

1 个答案:

答案 0 :(得分:0)

因为您对instagram api的ajax请求是异步执行的,所以您需要使用回调(作为参数传入)或返回$.Deferred。我还建议查找处理异步javascript的资源。一开始可能很难理解,但那里有很多的教程。

以下未经测试使用需要您自担风险:)

回调路线

  function pollInstagram(next_url, count, callback) {
    $.ajax({
      //  ** snip **
      success: function (data) {
        // ** add data to collected objs **

        // pass our transformed data to callback
        callback(collectedObjs);
      }
      //  ** snip **
    })
  }

  // usage:
  pollInstaGram('url', count, function (objs) {
    // this callback is executed _after_
    // the ajax request completes
    // and passed data
    // do something with objs
  });

延迟路线

  function pollInstagram(next_url, count) {
    // we return a jQuery defferred
    return $.ajax({
    //  ** snip **
    })
    .then(function (data) {
      // add data to collectedObjs
      return collectedObjs;
    })
    .fail(function () {
      // handle failure case
    })
  }

  // usage
  pollInstaGram('url', count).done(function (objs) {
    // done is executed after the deferred is resolved
    // with the transformed values from our `.then`
    // ** do something with objs **
  });