2010-07-26 61 views
5

我有困难从新Facebook的JS SDK新的图形API访问返回的JSON响应数据调用从FB.api的响应访问数据()

例如,在他们的一些文档,他们使用的是使用SDK的老办法,他们通过反应得到的指针数据[0]

但在这里,它表明你需要使用response.data [0]改为:http://developers.facebook.com/tools/console/(点击fb.api - 相册)

那么这是哪一个呢?我知道用我的代码下面,如果我尝试使用response [0]类型的语法来获取返回的JSON,我得到未定义。

如果我使用响应[0]。长度我也得到了一个未定义

但如果我尝试response.data [0]。长度我得到2我的猜测是返回JSON或我的2 albums..I只是不知道如何玩这个返回的对象的语法和操纵它,它的属性等。

我想最终解析出返回的JSON使用jQuery parseJSON方法,但不知道如何甚至在响应中传递正确的语法,并使用该响应对象。

FB.api(uri, function(response) 
{ 
    alert("response: " + response); 

    // check for a valid response 
    if (response == "undefined" || response == null || !response || response.error) 
    { 
     alert("error occured"); 
     return; 
    } 

    alert("response length: " + response.data.length); 
} 

这个警报给了我2这是有道理的。我有2张专辑。

然后我尝试了类似response.data [0]的东西,并尝试了jQuery parseJSON(response.data)parseJSON(response.data[0]),并且它不起作用。那么有人可以在这里解释这个响应对象吗?我没有看到关于如何使用那个返回的对象以及它是如何构造的文档。

更新:

好了,下面是我到目前为止已经灭掉整个分析方法的尝试。我不知道jQuery解析是否是100%的好代码,但我有点困惑,但我甚至无法测试,直到我找出如何使用这个响应对象回来。我知道它正在返回JSON,因为我在JS SDK中的另一个方法中解析了另一个Facebook响应对象,所以非常肯定响应[0]或response.data [0]会为您提供JSON字符串。

function GetAllFacebookAlbums(userID, accessToken) 
{ 
    alert("inside GetAllFacebookAlbums(userID, acessToken)"); 

    var dFacebookAlbums = {}; // dictionary 
    var uri = "/" + userID + "/albums?access_token=" + accessToken; 
    //var uri = "/me/albums"; 

    alert("get albums uri: " + uri); 

    FB.api(uri, function(response) 
    { 
     alert("response: " + response); 

     // check for a valid response 
     if (response == "undefined" || response == null || !response || response.error) 
     { 
      alert("error occured"); 
      return; 
     } 

     alert("response length: " + response.data.length); 

     for (var i=0, l=response.data.length; i<l; i++) 
     { 
      alert("response[key]: " + response.data[i].Name); 
     } 

     // parse JSON from response 
     var dJSONObjects = jQuery.parseJSON(response.data); 

     alert("dJSONObjects: " + dJSONObjects); 

     if (dJSONObjects.length == 0) 
      return; 

     // iterate through the dictionary of returned JSON objects 
     // and transform each to a custom facebookAlbum object 
     // then add each new FacebookAlbum to the final dictionary 
     // that will return a set of facebookAlbums 
     $.each(json.attributes, function() { 
      // add a new album to the dictionary 
      aFacebookAlbums[i] = FacebookAlbum(
               jsonObject["id"], 
               jsonObject["name"], 
               jsonObject["location"], 
               jsonObject["count"], 
               jsonObject["link"] 
              ); 
     }); 
    }); 

    return dFacebookAlbums; 
} 

回答

0

我没有看过API,但我怀疑FB会给你数组中的JSON编码的字符串。你有没有尝试只访问response.data [0] .someproperty?

+0

是的,尝试过,但也没有定义。我想解析出返回的JSON字符串。他们确实发回JSON我想......非常确定。 – PositiveGuy 2010-07-26 15:34:53

+0

@coffeeaddict:所以'alert(response.data [0] .name);'什么也不做?我没有看到你手动解析的例子,它甚至在你调用你的回调函数之前由API库处理。 – 2010-07-26 15:43:23

+0

实际上这是我试过的名字,因为每个专辑都有一个名称属性。但让我再试一次。我会发布我的解析..它发生在我上面的例子中的警报后,但因为我得到未定义,因为可能我不知道我回来或如何使用该对象,我的解析失败以及与未定义。 – PositiveGuy 2010-07-26 15:55:02

0

如果没有错误,那么response.data应该是你想要的东西(在大多数情况下这将是一个数组),如果你正在使用新的图形api。如果你不确定你回来的东西,你可以随时提醒JSON字符串。

2

通常,JS SDK不会返回JSON对象,但会返回一个与JSON对象类似的对象。

举例来说:一个是轮询用户事件数据,根据GRAPH API参考(http://developers.facebook.com/docs/reference/api/event),返回的数据将具有给定的属性http://developers.facebook.com/docs/reference/api/event

JSON对象的事件的数据会是这样,如果您使用PHP SDK

阵列([数据] =>数组([0] =>阵列([名称] =>采样事件[START_TIME ] => 2010-08-09T22:00:00 + 0000 [end_time] => 2010-08-10T01:00:00 + 0000 [位置] =>在办公室\ [id] => xxxxxxxx [rsvp_status] => ))[寻呼] =>数组([前] =>超级链接[下一个] =>超链接))

但是,如果使用的是JS SDK,则返回的响应将是这样

response.data [0 ... n]。属性您所接受的特定表格ssing。 因此,在事件表的情况下,它将是这样的:

response.data [0 ... n] .name或response.data [0 ... n] .id,response.data [0 ... n] .end_time等

4

这取决于正在使用的API。对于新的Graph API单个对象作为顶级对象返回:http://graph.facebook.com/naitik - 其中收集回来的顶级数据属性是Arrayhttp://graph.facebook.com/zuck/feed。有些反思让事情变得更简单:http://developers.facebook.com/docs/api#introspectionFQL是另一个流行的API调用,这是最高级别的响应是数组(认为SQL中的行),这就是为什么一些示例使用response[0]。最简单的事情就是在浏览器中查看响应或通过curl查看它的外观。

1

这是否得到了解决。没有人接受任何东西。

alert("response[key]: " + response.data[i].Name); 

上面的代码具有Name和不name。另外,正如Matti指出的那样:

response.data[0].name 

只是我的两分钱。 @CoffeeAddict,接受答案,以表示欣赏...似乎有人与你代表会很感激。 :O)

3

只是为了澄清所有你们这些人谁是新的FB.api(如我)图形查询返回不同形状的数据...这里有两个例子: FB.api('me/' function(returnData) { })会把以下数据returnData

{ 
    "id": "592529630", 
    "name": "Hugh Abbott", 
    "first_name": "Hugh", 
    "last_name": "Abbott", 
    } 

那么如果我说returnData.first_name我会得到“休”

然而,如果我的查询是我的朋友,我可能会遇到下面的查询 FB.api('me/friends/' function(returnData) { }) 我的数据的形状是不同的,现在:

"data": [ 
    { 
     "name": "Tom Bell", 
     "id": "36801805" 
    }, 
    { 
     "name": "Michael Royce", 
     "id": "199712888" 
    }, 
] 

...所以returnData现在是一个数组...为了检索值,我会做类似下面的事情。

returnData.data[0].name将返回“汤姆·贝尔”

我希望这可以帮助,因为我花了几个小时,想知道我出了毛病......事实证明,它是所有数据的形状! !祝你好运我的朋友。

0

我敢肯定,这一定不能再考虑Graph API explorer清楚,它返回的形式显示数据的问题。对于响应结构的差异你是对的,但是亲自看看使用资源管理器返回什么数据并相应地使用语法很有用。