我陷入了循环问题,无法得到它。
for (var i = 0; i < count; i++) {
FB.api({
method: 'fql.query',
query: 'SELECT name FROM user WHERE uid=' + temparray[i]
}, function (response) {
for (var x = 0; x < count; x++) {
$("#divfather" + x).html(response[0].name);
}
});
}
第二个循环是通过response[0].name
完成的,这是Facebook的名称,并向我显示所有div的相同响应。
我只想对i
变量进行第二次循环。
我该怎么做?
答案 0 :(得分:2)
要理解你想要的东西有点难,但我假设你只想要来自外部i
循环的for
。
您需要创建一个新的变量范围才能保留它。
for (var i = 0; i < count; i++) {
FB.api({
method: 'fql.query',
query: 'SELECT name FROM user WHERE uid=' + temparray[i]
}, (function( j ) { // <---- create a function...
// v---------...that returns a function...
return function (response) {
$("#divfather" + j ).html(response[0].name);
};
})( i ) // <------...and invoke it immediately, passing "i"
);
}
这是同样的事情,但是使用了一个命名函数,我觉得它更好一些。
function get_callback( j ) {
return function (response) {
$("#divfather" + j ).html(response[0].name);
};
}
for (var i = 0; i < count; i++) {
FB.api({
method: 'fql.query',
query: 'SELECT name FROM user WHERE uid=' + temparray[i]
}, get_callback( i ) );
}
或者就个人而言,我将所有逻辑放在函数中而不是将其拆分。
function set_up_FB_api( j ) {
FB.api({
method: 'fql.query',
query: 'SELECT name FROM user WHERE uid=' + temparray[ j ]
}, function (response) {
$("#divfather" + j ).html(response[0].name);
});
}
for (var i = 0; i < count; i++) {
set_up_FB_api( i );
}
答案 1 :(得分:0)
你有一个范围问题sken boy。
您在外部循环中使用i
,然后在内部循环中重新声明它。
将第二个循环更改为其他字母x
。