0

我现在正在玩 Facebook graph 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);
                        });
                    });
                    });
                });
                });     
                });
4

1 回答 1

1

速度慢的原因是您要进行大量查询:一个来获取您的好友列表,然后每个朋友再查询 3 个来获取他们的照片,?和位置。这些 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,它们遍历第二个结果以获取位置的纬度和经度。

于 2012-09-05T15:52:14.263 回答