我现在正在玩Facebook图形api。我正在获取所有用户朋友的个人资料和其他数据,并将它们作为标记放在谷歌地图上。
它正在工作但它似乎等待所有数据和图像在它开始显示之前返回。对不起,如果这太过分了,我是一个初学者。我已经尝试将JSON调用分解为几个回调函数,但这没有帮助。我希望收到数据后立即放置每个朋友的图像。
我的代码如下(4次使用jquery获取JSON的调用)。第一次调用获取朋友列表,然后为每个朋友获取图像和数据,然后获取位置数据。
$.getJSON("https://graph.facebook.com/" + userid + "/friends?access_token=" + token, function(data) {
$.each(data.data, function(key, val) {
$.getJSON("https://graph.facebook.com/"+ val.id + "?fields=picture", function(idata) {
var img = new Image();
img.src = idata.picture;
$.getJSON("https://graph.facebook.com/"+ val.id + "?access_token=" + token, function(fdata) {
$.getJSON("https://graph.facebook.com/"+ fdata.location.id + "?access_token=" + token , function(ldata) {
$('#map_canvas').gmap('addMarker', {
'id': 'mark',
'position': ldata.location.latitude + ',' + ldata.location.longitude,
'draggable': false,
'bounds': false,
'icon' : image.src,
'title' : fdata.name,
'animation': google.maps.Animation.DROP,
}).click(function() {
$('#map_canvas').gmap('openInfoWindow', {'content': 'Name: ' + fdata.name + '</br>Location: ' + fdata.location.name }, this);
});
});
});
});
});
});
答案 0 :(得分:1)
这个问题很慢的原因是你提出了很多疑问:一个是为了得到你的朋友名单,另外三个是为了让每个朋友得到他们的照片,?和位置。每个API调用都需要时间。很多时间。
首先,减少查询次数。使用Graph API,您可以获得两个所需的一切:
"https://graph.facebook.com/me/friends?fields=id,name,picture,location&access_token=" + token
然后遍历此查询的结果并提取所有location.id
值,比如说成一个名为loc
的数组。现在运行此查询:
"https://graph.facebook.com/?fields=location&ids=" + loc.join() + "&access_token=" + token
现在你可以遍历第一个结果来获取名称,图片和位置ID,它们遍历第二个结果以获得位置的纬度和经度。