Essayer d’accéder à l’API Instagram avec jQuery

J’essaie d’utiliser l’API Instagram et je fais des requêtes AJAX dans une boucle do-while jusqu’à ce que next_url soit nul. Tout ce que je veux, c’est que ce code récupère tous les abonnés en faisant des demandes continues jusqu’à ce que ce soit fait. Quel est le problème dans ce code?

Lorsque je supprime la boucle do-while, cela ne me donne pas d’erreur, mais dès que j’utilise la demande AJAX dans une boucle, elle ne s’arrête jamais. Clairement, la chaîne $next_url ne change pas pour le next_url récupéré – pourquoi? Qu’est-ce qui ne va pas?

 $(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); }); }); 

Après avoir échoué dans ma logique, j’ai ajouté la variable $count qui peut interrompre la boucle do-while, car celle-ci s’exécutait à l’infini. Après l’avoir ajouté, il tourne toujours à l’infini et je ne sais pas pourquoi.

Demandez à la fonction de s’appeler elle-même dans le rappel de succès ajax avec la nouvelle URL en tant que paramètre:

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