【发布时间】:2012-07-29 19:07:48
【问题描述】:
我正在尝试使用 Instagram API,并在 do-while 循环中发出 AJAX 请求,直到 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);
});
});
在我的逻辑失败后,我添加了可以中断 do-while 循环的 $count 变量,因为 do-while 循环无限运行。加了之后还是无限运行,不知道是什么原因。
【问题讨论】:
-
所以你把你的整个 ajax 函数放在一个循环中,它每次都会让你的浏览器崩溃,现在我们该怎么办?????????????? ?????????
-
请告诉我如何在完成获取所有关注者后打破循环。这次评论一些有用的东西。
-
这种方法对于异步 ajax 调用实际上并不适用,因为即使在 ajax 调用返回之前,循环也会继续进行。您可以尝试的一种方法是递归,在成功回调中触发每个新的 ajax 调用。不过这会很昂贵,所以我想说完全重新设计你的方法,看看你是否可以减少必要的 ajax 调用数量并在服务器端做更多的工作。
-
你能给出一个示例代码作为例子吗? @nbrooks
-
实际上,这段代码的全部意义在于减轻服务器的负载,因此不能在服务器端做某事。 @nbrooks