2010-07-26 57 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清楚,它返回的形式顯示數據的問題。對於響應結構的差異你是對的,但是親自看看使用資源管理器返回什麼數據並相應地使用語法很有用。