jQuery:如何缩进无限循环?

jQuery:如何缩进无限循环?,jquery,json,twitter,infinite-loop,Jquery,Json,Twitter,Infinite Loop,发生了什么事。我希望在Twitter上存储多个列表中的一些数据。每个请求最多返回20个数组,因此如果列表中的成员超过20个,则必须执行多个请求(使用cursor属性获取下一个请求)。所以我想:无限循环来调用和解析json 基本上我想做的是:调用第一个json(游标值设置为-1)并存储数据。然后调用第二个json(光标值=上一个json的下一个\u cursor\u str值)。然后给第三个打电话。。。如果下一个_cursor _strvalue=0(这意味着它是最后一个json),则停止循环。这

发生了什么事。我希望在Twitter上存储多个列表中的一些数据。每个请求最多返回20个数组,因此如果列表中的成员超过20个,则必须执行多个请求(使用cursor属性获取下一个请求)。所以我想:无限循环来调用和解析
json

基本上我想做的是:调用第一个json(游标值设置为-1)并存储数据。然后调用第二个
json
(光标值=上一个
json
的下一个\u cursor\u str值)。然后给第三个打电话。。。如果下一个_cursor _strvalue=0(这意味着它是最后一个
json
),则停止循环。这是我的初稿:

var interval = setInterval(function(i){ /*start the loop*/
    if (i==1) {var cursor = '&cursor=-1'} else {var cursor = '&cursor='+json.next_cursor_str+''} /* set the value of cursor ine the request. The first request have to be cursor=-1*/
        var url='twitter-proxy.php?url='+encodeURIComponent('lists/members.json?owner_screen_name=flavienhamon&slug=lexpress&skip_status=true'+cursor+''); /*Make the request*/
            $.getJSON(url, function(json) { processData(json); /*store data for processing*/ console.log(json); 



    if (json.next_cursor_str == 0) {window.clearInterval(interval);}; /*stop the loop if*/
            });   
},5000); /*end of loop fonction*/       
无限循环工作,有停止事件。但是我不能将第一个被调用的json设置为“cursor=-1”和
'&cursor='+json。下一个_cursor_str+'
不起作用,因为json尚未定义

所以我做了一些改变:

var url='twitter-proxy.php?url='+encodeURIComponent('lists/members.json?owner_screen_name=flavienhamon&slug=lexpress&skip_status=true&cursor=-1'); /*call manually the first json*/
  $.getJSON(url, function(json) { processData(json); console.log(json); NombreCompteJ1 = json.users.length;
    var interval = setInterval(function(i){ /*start the loop*/
            var url='twitter-proxy.php?url='+encodeURIComponent('lists/members.json?owner_screen_name=flavienhamon&slug=lexpress&skip_status=true&cursor='+json.next_cursor_str+''); /*Make the request*/
                $.getJSON(url, function(json) { processData(json); /*store data for processing*/ console.log(json); 



        if (json.next_cursor_str == 0) {window.clearInterval(interval);}; /*stop the loop if*/
                });   
    },5000); /*end of loop fonction*/       

});     
这一次,第一个json是调用和过程,没有问题。然后循环开始调用第二个json,处理它,然后。。。再打第二个

控制台捕获:

&cursor='+json.next\u cursor\u str+'
一次又一次地调用第一个json的next\u cursor\u str值,而不是调用循环的前一个元素的值

有人可以解释如何解决这个问题吗?两天以来我一直在学习jQuery和JS,我读了很多书,但在这方面我找不到任何东西。我可以用一只手来学习

使用
setTimeout()
而不是
setInterval()
,这样每次都可以用更新的光标传递闭包。并将代码定义为命名函数,以便可以在
setTimeout()
中调用它

从以下内容开始循环:

getData(-1);

嗨@Barmar,谢谢你的时间。我不理解您刚刚发布的代码中的一些内容:如何将第一个游标值设置为-1(从而启动循环)以及
if(var next\u cursor=json.next\u cursor\u str){…}
如何工作
next\u cursor
不能等于json.next\u cursor\u str。(
=
是“意外标记=”)。现在,您的代码让我想到了一些东西,如果
json,我们可以开始一个循环吗?(我正在尝试这样做,但我们已经交谈)我用起始呼叫更新了答案。
如果
语句没有将
next\u cursor
json进行比较。next\u cursor\u str
,它将
json.next\u cursor\u str
分配给
next\u cursor
=
是分配,
=
将是比较)。所以它分配变量并测试它是否为零。Thx很多!成功了!通过你的解释和你的第二个代码,我已经明白了(这就是我想要的)。我添加了一些东西来停止循环。Thx@Barman!(我用最后的代码更新了我的第一篇文章)你不需要做
clearTimeout(timeout)
,因为当
next\u cursor
为0时我们不会启动超时。Arf,我仍然缺少一些东西来最小化代码。当我加载您的代码时,循环工作,但它不会停止,这就是为什么我添加了
clearTimeout(timeout)
getData(-1);