2010-07-26 2 views
5

У меня возникли трудности с получением возвращаемых данных ответа JSON от нового Facebook JS SDKновые вызовы Graph API.Доступ к данным из ответа FB.api()

Например, в некоторых из их документов, где они используют старый способ использования SDK, они получают указатель на данные по реакции [0]

, но здесь, это показывает, что вам нужно использовать response.data [0] вместо: http://developers.facebook.com/tools/console/ (нажмите на fb.api - фотоальбомы)

Итак, что это? Я знаю, что с моим кодом ниже, если я попытаюсь использовать синтаксис типа ответа [0] для получения возвращаемого JSON, я получаю undefined.

Если я использую ответ [0] .length Я также получаю неопределенный

Но если я пытаюсь response.data [0] .length я получаю 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]) на этом, и он не работает. Так может кто-нибудь объяснить объект ответа здесь, как в отношении Facebook, я думаю? Я не вижу документов о том, как использовать этот возвращенный объект вообще и как он построен.

ОБНОВЛЕНО:

Итак, вот весь метод синтаксического анализа попытка, что я погасил до сих пор. Я не знаю, является ли парсинг jQuery еще на 100% хорошим кодом, я вроде как это пропустил, но я не могу даже проверить это, пока не выясню, как использовать этот объект ответа, возвращающийся назад. Я знаю, что он возвращает JSON, потому что я проанализировал другой объект ответа facebook другим методом в JS SDK настолько уверенным, что ответ [0] или response.data [0] даст вам строку JSON.

ответ

0

Я не смотрел API, но я сомневаюсь, что FB предоставит вам JSON-закодированные строки в массиве. Вы пытались просто получить доступ к response.data [0] .someproperty?

+0

Да, попробовал это, но получил неопределенный также. Я хочу проанализировать возвращаемую строку JSON. Они отправляют обратно JSON, я думаю ... довольно уверен. – PositiveGuy

+0

@coffeeaddict: Так 'alert (response.data [0] .name);' ничего не делает? Я не вижу примера, с которым вы связались с сеансом разбора вручную, который обрабатывается библиотекой API, прежде чем он даже вызовет ваш обратный вызов. –

+0

На самом деле это то же самое, что я пробовал..имя, потому что каждый альбом имеет свойство имени. Но позвольте мне попробовать еще раз. Я опубликую свой синтаксический анализ ... это произойдет после этого предупреждения в моем примере выше, но из-за того, что я получаю неопределенное значение, потому что, возможно, я не знаю, что я получаю или как использовать этот объект, мой анализ также не сработает не определено. – PositiveGuy

0

Если ошибки нет, то response.data должен быть нужной вам (в большинстве случаев это будет массив), если вы используете новый график api. Вы всегда можете просто предупредить строку JSON, если вы не знаете, что получаете.

2

В общем, JS SDK не возвращает объект JSON, но возвращает объект, который структурирован аналогично объекту JSON.

Скажите, например: один из них - опрос данных пользовательских событий и согласно ссылке API GRAPH (http://developers.facebook.com/docs/reference/api/event), возвращаемые данные будут иметь атрибуты как заданные http://developers.facebook.com/docs/reference/api/event.

объект JSON для данных событий было бы так, если вы используете PHP SDK

Array ([данные] => Array ([0] => Array ([имя] => Пример события [start_time ] => 2010-08-09T22: 00: 00 + 0000 [end_time] => 2010-08-10T01: 00: 00 + 0000 [location] => в офисе \ [id] => xxxxxxxx [rsvp_status] => посещение)) [пейджинговой] => Array ([назад] => гиперссылка [следующая] => гиперссылка))

Но если вы используете 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 - где, когда коллекции возвращаются с верхнего уровня данные имущество, которое является Array: http://graph.facebook.com/zuck/feed. Есть также интроспекция, чтобы сделать вещи несколько проще: http://developers.facebook.com/docs/api#introspection. FQL - это другой популярный вызов API, и именно здесь ответ верхнего уровня представляет собой массив (думаю, строки в SQL), поэтому в некоторых примерах используется response[0]. Самое простое - просто посмотреть на ответ в своем браузере или через завиток и посмотреть, как он выглядит.

1

Это когда-либо выяснилось. Никто ничего не принял.

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

Приведенный выше код имеет Name и не name. Также, как отметил Матти, это работает:

response.data[0].name 

Только мои два цента. @CoffeeAddict, примите ответы, чтобы показать некоторую признательность ... Похоже, кто-то с вами, репутатор, оценил бы это. : О)

3

только прояснить для всех вас, людей, которые являются новыми для FB.api (как я) граф запросы возвращают данные различной формы ... вот два примера: FB.api('me/' function(returnData) { }) поместили бы следующие данные в returnData

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

тогда, если я сказал returnData.first_name я хотел бы получить «Хью~d»

Если же мой запрос был о моих друзьях, я мог бы выполнить следующий запрос 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 четко отображает данные в форме, что он возвращается. Вы правы в различии в структуре ответов, но лично было полезно увидеть, какие данные возвращаются с помощью проводника, и использовать синтаксис соответственно.

Смежные вопросы