Страница 1 из 1
XML в JSON
Добавлено: 08 дек 2012, 20:43
manticore
Как изменить вот такой код во Flex?
Это получение данных XML:
Код: Выделить всё
public function setName(event:Event):void { var loader:URLLoader = URLLoader(event.target); if(XML(loader.data).user.first_name.text().toString()!="") { userName=XML(loader.data).user.first_name.text().toString()+" "+XML(loader.data).user.last_name.text().toString() } if(XML(loader.data).user.photo_medium.text().toString()!="") { photo_medium=XML(loader.data).user.photo_medium.text().toString(); } }
А как это переделать, чтобы получать JSON?
Кому не трудно, можете объяснить на этом куске кода?

Re: XML в JSON
Добавлено: 08 дек 2012, 22:38
manticore
попытался сделать так:
Код: Выделить всё
public function setName(e:Event):void { var loader:URLLoader = URLLoader(e.target); var decode:Array = JSON.decode(loader.data); userName = decode[0].first_name.toString()+" "+decode[0].last_name.toString(); photo_medium = decode[0].photo_medium.toString(); }
Не помогло.
Response такой:
Код: Выделить всё
{"response":[{"uid":11028682,"first_name":"Сережа","last_name":"Тяглов","photo_medium":"http:\/\/cs403225.userapi.com\/v403225682\/2b88\/lbkMUD3tLJI.jpg"}]}
Re: XML в JSON
Добавлено: 09 дек 2012, 00:09
Alazaur
Так глянули б в вконтактовский APIConnection как сделано
Код: Выделить всё
loader.addEventListener(Event.COMPLETE, function(e:Event):void{ var loader:URLLoader = URLLoader(e.target); trace(loader.data); var data: Object = JSON.decode(loader.data); if (data.error) { options.onError(data.error); } else if (options.onComplete && (data.response != null)) { options.onComplete(data.response); } });
За анонимные функции конечно руки б им оторвать

но вам ж не они нужны
Если коротко, то не
а
Re: XML в JSON
Добавлено: 09 дек 2012, 10:10
manticore
Спасибо. А вот еще вопрос интересует. Ведь данный запрос к VK:
Код: Выделить всё
VK.api('users.get',{uids: flashVars.viewer_id, fields: 'photo_medium'}, setName, error);
должен при успешном выполнении делать функцию setName, а при ошибки error.
Так почему он не вызывает ни одну из этих функций, хотя проверял Charles, запрос без ошибок.
В чем может быть проблема?
Функция setName:
Код: Выделить всё
public function setName(e:Event):void { var loader:URLLoader = URLLoader(e.target); var decode:Array = JSON.decode(loader.data); userName=decode.response[0].first_name.toString()+" "+decode.response[0].last_name.toString(); }
Функция error:
Код: Выделить всё
public function error():void { Alert.show("Ошибка запроса!"); }
Re: XML в JSON
Добавлено: 09 дек 2012, 10:15
Casperovskii
Фишка в том, что события нет вроде как. Нужно так:
Код: Выделить всё
public function setName(setNameResponse:Array):void
Т.е. у тебя переменные для функции неправильно заданы. Vk.api возвращает ответ в виде массива, а не событие.
Re: XML в JSON
Добавлено: 09 дек 2012, 10:24
manticore
Работает, только если я убираю часть выше.
Код: Выделить всё
public function setName(setNameResponse:Array):void { var loader:URLLoader = URLLoader(setNameResponse); // насчет этого не уверен ;( var decode:Array = JSON.decode(loader.data); name_heroes.text = "1"; }
Работает если убрать:
Код: Выделить всё
public function setName(setNameResponse:Array):void { name_heroes.text = "1"; // так работает отлично и выводит. }
Что не так написано выше?
Re: XML в JSON
Добавлено: 09 дек 2012, 10:33
Casperovskii
manticore
Добавь в функцию SetName строку trace("Функция сработала") и проверь локально. Ну или просто сделай что-то, что точно выполнится. Мне кажется, ошибка в
Код: Выделить всё
userName=decode.response[0].first_name.toString()+" "+decode.response[0].last_name.toString();
Зачем декодить джсон? Да и лоадера у вас же нет...
Я делал так:
Код: Выделить всё
public function setName(setNameResponse:Array):void { userName=setNameResponse[0].first_name+" "+setNameResponse[0].last_name; }
UPD: нет у вас лоадера в е.таргет. Он обращается к пустой переменной. Нужно сделать как у меня, потому что Апи возвращает массив, который и передается в исполняемую функцию
Re: XML в JSON
Добавлено: 09 дек 2012, 10:37
manticore
Спасибо большое, все работает
