![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2009
Сообщений: 40
|
Делаю класс для работы с АПИ
package { public class API { import MD5; import flash.net.*; import flash.xml.*; import flash.events.*; var API_SERVER_URL:String="http://api.vkontakte.ru/api.php"; var API_METHOD:String; var API_SIG:String; var API_SECRET:String; var API_V:String; var API_TEST_MODE:Number; var VIEWER_ID:String; var API_ID:String; var my_request:URLRequest; public var my_loader:URLLoader= new URLLoader(); var my_vars:URLVariables; var myXml:XML; public function API(api_id:String, api_secret:String, viewer_id:String, api_v:String, api_test_mode:Number) { API_ID=api_id; API_SECRET=api_secret; VIEWER_ID=viewer_id; API_V=api_v; API_TEST_MODE=api_test_mode; } public function send_request(method:String):XML { my_request= new URLRequest(API_SERVER_URL); my_loader.addEventListener(Event.COMPLETE, checkComplete); my_vars = new URLVariables(); my_request.method = URLRequestMethod.POST; my_loader.dataFormat=URLLoaderDataFormat.TEXT; API_METHOD=method; API_SIG=MD5.hash(VIEWER_ID+"api_id="+API_ID+"method="+API_METHOD+"test_mode="+API_TEST_MODE+"v="+API_V+API_SECRET); my_vars.api_id=API_ID; my_vars.method=API_METHOD; my_vars.sig=API_SIG; my_vars.v=API_V; my_vars.test_mode=API_TEST_MODE; my_request.data = my_vars; my_loader.load(my_request); return myXml; } public function checkComplete(event:Event):void { var loader:URLLoader = URLLoader(event.target); myXml=new XML(loader.data); } } } import API; var API_ID:String=String(LoaderInfo(root.loaderInfo).parameters.api_id); var viewer_id:String= String(LoaderInfo(root.loaderInfo).parameters.viewer_id); var myXML:XML=new XML(); var API_SECRET:String="SECRET"; btn1.addEventListener(MouseEvent.CLICK, onClick); var api_control:API=new API(API_ID, API_SECRET, viewer_id, "2.0", 1); function onClick(event:MouseEvent):void { output.appendText(api_control.send_request("getFriends")); } Учу для себя, потому что интересно) Вот. К описанию проблемы. Насколько я понимаю, когда я вызываю send_request, он сразу возвращает XML, не дождавшись завершения загрузки. Тоесть нужные мне данные я получаю только при втором нажатии на кнопку. Помогите сделать так чтобы ХМЛ возвращался тогда когда уже загрузка завершенна. Спасибо) |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Использовать событийную модель.
|
|
|||||
|
Регистрация: Jun 2009
Сообщений: 40
|
Эээ... а можно пример какой то или ссылку?)
Добавлено через 2 часа 57 минут ау! тут кто то есть?) |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Откройте доку по EventDispatcher.
|
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
не должен возвращать XML, лучше сделать
__________________
Отряд Котовскага |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Котяра, а как извне убить обработчик onXMLDataListener?
|
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
а его можно и не делать)
package private var _onXMLDadaListiner:Function public function send_request(method:String, onXMLDadaListiner:Function):void { _onXMLDadaListiner=onXMLDadaListiner; my_request= new URLRequest(API_SERVER_URL); my_loader.addEventListener(Event.COMPLETE, checkComplete); my_vars = new URLVariables(); my_request.method = URLRequestMethod.POST; my_loader.dataFormat=URLLoaderDataFormat.TEXT; my_loader.load(my_request); } public function checkComplete(event:Event):void { my_loader.removeEventListener(Event.COMPLETE, checkComplete); _onXMLDadaListiner( event.target.data) } } }
__________________
Отряд Котовскага Последний раз редактировалось Котяра; 06.06.2009 в 12:59. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Я понимаю, что можно не делать. Как уничтожить API, после того, как он становится ненужным?
|
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
ну не знаю..это уже другой вопрос. либо делать его каким-то доступным свойством и вызывать у него метод kill, либо вызывать этот kill в том-же обработчике checkComplete.
__________________
Отряд Котовскага |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
А события-то чем не устроили?
|
![]() |
![]() |
Часовой пояс GMT +4, время: 20:16. |
|
|
« Предыдущая тема | Следующая тема » |
|
|