循环结果导致jQuery

时间:2011-08-10 23:02:46

标签: javascript jquery javascript-events facebook-graph-api

我陷入了循环问题,无法得到它。

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变量进行第二次循环。

我该怎么做?

2 个答案:

答案 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