Попытка получить доступ к API Instagram с помощью jQuery
Вопрос
Я пытаюсь использовать API Instagram и делаю запросы AJAX в цикле do- while, пока next_url не станет нулевым.Все, что мне нужно от этого кода, — это получить всех подписчиков, делая непрерывные запросы, пока это не будет выполнено.Что не так в этом коде?
Когда я удаляю цикл do- while, он не выдает ошибки, но как только я использую запрос AJAX внутри цикла, он никогда не останавливается.Очевидно, $next_url
строка не меняется на вновь полученную next_url
- почему?Что не так?
$(document).ready(function(e) {
$('#fetch_followers').click(function(e) {
var $next_url = 'https://api.instagram.com/v1/users/{user-id}/followed-by?access_token={access-token}&count=100';
var $access_token = '{access-token}';
var $is_busy = false;
var $count = 0;
do {
while($is_busy) {}
$.ajax({
method: "GET",
url: $next_url,
dataType: "jsonp",
jsonp : "callback",
jsonpCallback: "jsonpcallback",
success: function(data) {
$is_busy = true;
$.each(data.data, function(i, item) {
$("#log").val($("#log").val() + item.id + '\n');
});
$("#log").val($("#log").val() + data.pagination.next_url + '\n');
$next_url = data.pagination.next_url;
},
error: function(jqXHR, textStatus, errorThrown) {
$is_busy = true;
//alert("Check you internet Connection");
$("#log").val($("#log").val() + 'Error\n');
},
complete: function() {
++$count;
$is_busy = false;
}
});
} while($next_url !== '' || $count <= 50);
});
});
После того, как я потерпел неудачу в своей логике, я добавил $count
переменная, которая может прервать цикл do- while, поскольку цикл do- while выполнялся бесконечно.После добавления он по-прежнему работает бесконечно, и я понятия не имею, почему.
Решение
Попросите функцию вызвать саму себя в обратном вызове успеха ajax с новым URL-адресом в качестве параметра:
$(document).ready(function() {
$('#fetch_followers').click(function() {
var $access_token = '{access-token}';
pollInstagram('https://api.instagram.com/v1/users/{user-id}/followed-by?access_token={access-token}&count=100');
});
});
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');
});
$("#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 ) {
pollInstagram(data.pagination.next_url, ++count);
}
},
error: function(jqXHR, textStatus, errorThrown) {
//alert("Check you internet Connection");
$("#log").val($("#log").val() + 'Error\n');
}
});
}