Здравствуйте, коллеги.
Ради интереса, решил изучить ВКонтакте API, но достаточно быстро застопорился.
Приведу код, а дальше объясню, в чём проблема:
Код AS3:
package vkApiTest
{
import flash.display.JointStyle;
import flash.display.Sprite;
import flash.events.*;
import flash.text.*;
import vk.APIConnection;
public class Main extends Sprite
{
private var tF:TextField = new TextField();
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
var flashVars:Object = stage.loaderInfo.parameters as Object;
var VK:APIConnection = new APIConnection(flashVars);
if (!flashVars.api_id)
{
// -- For local testing enter you test-code here:
flashVars['api_id'] = 1888171;
flashVars['viewer_id'] = 66748;
flashVars['sid'] = "7e22c25d7fece88f2316553937ff24f43e1073ca28e8b4302e65db35fa";
flashVars['secret'] = "6113n3e4g3";
// -- //
}
tF.type = TextFieldType.DYNAMIC;
tF.border = true;
tF.width = 200;
tF.height = 200;
addChild(tF);
VK.api('storage.set', { key:'var', value:'example' } );
VK.api('storage.get', { key:'var' }, completeFunc, errorFunc);
function completeFunc(vkObj:Object):void {
tF.appendText("completeFunc сработала");
if (vkObj[0] == "example")
{
tF.appendText("Работает!");
}
else
{
tF.appendText("Работает, но не так...");
}
}
function errorFunc(vkObj:Object):void {
tF.appendText("Ошибка");
}
}
}
}
Всё время выходит какая-то белиберда.
Это приложение заливается в Контакт. Дальше просто запускается. Если приложение "отключено", то в textField'e появляется сообщение "Ошибка", то есть срабатывает функция errorFunc. Если приложение "включено и видно всем", то в текстовом поле появляется "completeFunc сработала". Окей, я в правильном направлении.
Но вот как получить доступ к возвращённому функцией значению? Обращаюсь к официальному руководству по API:
http://vk.com/pages?oid=-1&p=storage.get
Ничего не проясняется... Да, функция возвращает значение. Но в каком виде? Я так понимаю, что в виде переменной экземпляра объекта, который передаётся в мою функцию completeFunc.
Возможно ошибка где-то в синтаксисе. Чтобы понять, как правильно обратить к возвращаемому значению я читал:
http://www.flasher.ru/forum/showthread.php?t=181260 - эту тему на форуме. Пробовал:
Код AS3:
if (vkObj[0] == "example")
ничего...
http://vk.com/topic-1_21972158 - искал в этой теме по ключевому слову "storage.get".
http://vk.com/topic-2226515_3507340 - искал в этой теме по тому же ключевому слову.
Пробовал:
vkObj.response
vkObj['response']
vkObj.data
vkObj.['data']
vkObj[0]
В общем что-то ничего не получается. Прошу объяснить мне, что не так и, если возможно, привести работающие примеры. Если что-то из списка выше того, что я пробовал, на самом деле верно, то укажите мне на это. Буду искать у себя ошибку.
П.С. И как бы мне просмотреть все переменные экземпляра у объекта и вывести их имена и значения?
Добавлено через 19 часов 9 минут
Много узнал про JSON, но всё-равно ничего не понимается.
Итак, возвращается значение в виде:
Код:
{"response":"example"}
Моя функция completeFunc в качестве аргумента получает декодированную JSON-строки в виде объекта, который присваивается переменной vkObj. Значит у этого объекта должна быть переменная экземпляра "response" со значением "example".
Внёс изменения в код, чтобы выполнить метод "encode" над vkObj и посмотреть JSON-строку в первоначальном виде:
Код AS3:
VK.api('storage.set', { key:'var', value:'example' } );
VK.api('storage.get', { key:'var' }, completeFunc, errorFunc);
function completeFunc(vkObj:Object):void {
var data:String = JSON.encode(vkObj);
tF.appendText(data);
if (data == "example")
{
tF.appendText("Работает!");
}
else
{
tF.appendText("\nРаботает, но не так...");
}
}
function errorFunc(vkObj:Object):void {
tF.appendText("Ошибка");
}
В результате вывод выглядит так:
Цитата:
"example"
Работает, но не так...
|
??
Почему же выводится просто "example" (да еще и в кавычках), а не {"response":"example"}?
Что я делаю не так и как же мне всё-таки получить значение переменной, возвращаемое методом storage.get?