我正在尝试使用Instagram API,并在do- while循环中发出AJAX请求,直到next_url为空。我想要这段代码要做的就是通过发出连续的请求来获取所有关注者,直到完成为止。该代码有什么问题?
当我删除do- while循环时,它不会给我一个错误,但是一旦我在循环中使用AJAX请求,它就永远不会停止。显然,$next_url字符串没有更改为新获取的字符串next_url-为什么?怎么了?
$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循环无限运行。添加后,它仍然可以无限运行,我也不知道为什么。
$count
在新的url作为参数的情况下,在ajax成功回调中调用函数本身:
$(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'); } }); }