2011-08-10 7 views
0

ループの問題でスタックされて取得できませんでした。jQueryのループスルー

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

第二のループは、フェイスブックの名前と私のすべてのdivに同じ応答を示すであるresponse[0].nameを介して行われます。

i変数にこの2番目のループだけを実行します。

どうすればいいですか?

答えて

2

あなたが望むものを理解するのはちょっと難しいですが、を外側の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); 
} 
+0

あなたは星です。きれいに働いてくれました –

+0

@sken boy:どうぞよろしくお願いします。 – user113716

+2

heh良い仕事@パトリック:)私は彼が求めていたものを完全に逃した。 – Darin

0

あなたにはスコープに関する問題があります。

外部ループでiを使用していて、それを内部ループで再宣言しています。

xのような別の文字に2番目のループを変更します。

+0

ご回答ありがとうございます。私はちょうどそれを変更し、同じ問題がまだ... –

関連する問題