Попытка получить доступ к API Instagram с помощью jQuery

StackOverflow https://stackoverflow.com//questions/11712106

  •  13-12-2019
  •  | 
  •  

Вопрос

Я пытаюсь использовать 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');
        }
    });
}​
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top