我通过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');
}
});
}
答案 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 **
});