0

友達リスト(名前、写真、性別)を変数に保存しようとしていますが、正しく機能しません。詳細については、コード内のコメントを準備してください。何か案は?ありがとう。

function getFriendsArray() {    
    var friendsArray = [];
        FB.api('/me/friends?fields=name,picture,gender', function(response) {
      if(response.data) {
        var data = '';
        $.each(response.data, function(indice, item) {
            alert(item.name); // Friend's name are displayed correctly
            friendsArray.push(item); // I believe this doesn't work
        });                       
      }
      else {
          errorHandler('getFriendsArray', JSON.stringify(response));
      }
    });

alert(friendsArray.length); // Returns 0 (incorrect)

return friendsArray.sort(sortByName);   
}
4

2 に答える 2

0

呼び出しfunction(response)は非同期です。後にアラートを挿入する必要があります$.each

完全を期すために:問題へのアプローチを変更する必要があります。配列を返す関数を呼び出さずに、2番目の関数を呼び出します。

function getFriendsArray(callback, errorHandler) {    
    var friendsArray = [];
        FB.api('/me/friends?fields=name,picture,gender', function(response) {
      if(response.data) {
        var data = '';
        $.each(response.data, function(indice, item) {
            alert(item.name); // Friend's name are displayed correctly
            friendsArray.push(item); // I believe this doesn't work
        });
        callback(friendsArray);                       
      }
      else {
          errorHandler('getFriendsArray', JSON.stringify(response));
      }
    });
}

getFriendsArray(function(friends) {
    alert(friends);
},
function(error) {
    alert('error');
});
于 2012-10-17T12:22:52.273 に答える
0

FB.apiが非同期リクエスト(jQuery.ajaxなど)を作成しているように見えるためalert(friendsArray.length)、FB.api呼び出しが完了して結果をfriends配列にプッシュする前に実行しています。

于 2012-10-17T12:23:36.750 に答える