0
for (var i = 0; i < friends.length; i++) {
    var friend = $("<li>" + friends[i].name + "</li>");
    FB.api('/' + eventId + '/invited/' + friends[i].id, 'post', {}, function (response) {
        //friend here is the last one created for all callbacks
    });
}

友人をイベントに招待するループがありfriendます。ここで作成されたjqueryオブジェクトは、常にすべてのコールバックに対して作成された最後のオブジェクトであることがわかりました。これは、Facebookの呼び出しが非同期であるためだと思います。ここでスコープを維持するにはどうすればよいですか?

4

2 に答える 2

2

ローカル変数のクロージャを作成できます。

for (var i = 0; i < friends.length; i++) {
  var friend = $("<li>" + friends[i].name + "</li>");

  (function(friend){

    FB.api('/' + eventId + '/invited/' + friends[i].id, 'post', {}, function (response) {
      //friend here is the parameter in the closure, so it's preserved for each item
    });

  })(friend);

}
于 2012-05-22T11:32:23.543 に答える
1

これを試して:

for (var i = 0; i < friends.length; i++) {
    var friend = $("<li>" + friends[i].name + "</li>");
    var callback = (function(friend){
       return function (response) {
          //friend here should be the correct one
       })(friend);
    }
    FB.api('/' + eventId + '/invited/' + friends[i].id, 'post', {}, callback);
}
于 2012-05-22T11:30:19.893 に答える