我正在尝试将我的朋友列表(名称,图片和性别)存储在var上,但它无法正常工作。请准备好代码中的注释以获取详细信息。有任何想法吗?感谢。
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);
}
答案 0 :(得分:1)
调用function(response)
是异步的。您应该在$.each
为了完整性:你应该改变你的问题方法:不要调用一个返回数组但调用第二个函数的函数。
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');
});
答案 1 :(得分:1)
看起来FB.api发出异步请求(比如jQuery.ajax),因此在FB.api调用完成之前执行alert(friendsArray.length)
并将结果推送到friends数组中。