سؤال

أحاول استخدام Instagram API وأقدم طلبات 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');
        }
    });
}​
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top