Ajax 尝试使用jQuery访问Instagram API

Ajax 尝试使用jQuery访问Instagram API,ajax,jquery,instagram,Ajax,Jquery,Instagram,我正在尝试使用Instagram API,并在do while循环中发出AJAX请求,直到下一个url为空。我希望这段代码所要做的就是通过发出连续的请求来获取所有追随者,直到完成为止。这个代码有什么问题 当我删除do while循环时,它不会给我一个错误,但是只要我在循环中使用AJAX请求,它就不会停止。显然,$next_url字符串没有更改为新获取的next_url-为什么?怎么了 $(document).ready(function(e) { $('#fetch_follow

我正在尝试使用Instagram API,并在do while循环中发出AJAX请求,直到下一个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');
        }
    });
}​

在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');
        }
    });
}​

所以你把整个ajax功能都放在一个循环中,每次它都会使你的浏览器崩溃,现在我们该怎么办?只要告诉我在获取所有追随者后如何打破循环就行了。这一次,请评论一些有用的东西。这种方法对于异步ajax调用实际上不起作用,因为循环甚至在ajax调用返回之前就一直在进行。您可以尝试的一种方法是递归,在成功回调中触发每个新的ajax调用。但是这会很昂贵,所以我想简单地重新设计您的方法,看看是否可以减少必要的ajax调用数量,并在服务器端做更多的工作。您能给出一个示例代码吗@nbrooks实际上,这段代码的全部目的是从服务器上卸下负载,因此在服务器端执行某些操作不是一个选项@nbrooksSo你把整个ajax功能放在一个循环中,每次它都会使你的浏览器崩溃,现在我们该怎么办?只要告诉我在获取所有追随者后如何打破循环就行了。这一次,请评论一些有用的东西。这种方法对于异步ajax调用实际上不起作用,因为循环甚至在ajax调用返回之前就一直在进行。您可以尝试的一种方法是递归,在成功回调中触发每个新的ajax调用。但是这会很昂贵,所以我想简单地重新设计您的方法,看看是否可以减少必要的ajax调用数量,并在服务器端做更多的工作。您能给出一个示例代码吗@nbrooks实际上,这段代码的全部目的是从服务器上卸下负载,因此在服务器端执行某些操作不是一个选项@丁布鲁克斯