|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Dec 2008
Сообщений: 12
|
Проблема вывода данных методом URLLoader
Здраствуйте! Я создаю класс для vkontakte.ru и наткнулся на проблему. Мне нужно вывести из класса return'ом загруженные данные, однако URLLoader не успевает подгрузить все данные. Скажите пожалуйста как это сделать?
вот скриптик, который я мнемного сплагиатил... package api { import flash.net.*; import flash.events.*; import api.serialization.json.*; public class DataProvider { public const API_SERVER_URL: String = "http://api.vkontakte.ru/api.php"; private var _data:Object; private var _api_id: Number; private var _api_secret: String; private var _viewer_id: Number; private var _test_mode: Boolean; public function DataProvider(api_id: Number, api_secret: String, viewer_id: Number, test_mode: Boolean = false) { _api_id = api_id; _api_secret = api_secret; _viewer_id = viewer_id; _test_mode = test_mode; } public function request(method: String, options: Object = null):void { var request_params: Object = {method: method}; if (options == null) { options = new Object(); } request_params.api_id = _api_id; request_params.format = "JSON"; if (_test_mode) { request_params.test_mode = "1"; } if (options.params) { for (var i: String in options.params) { request_params[i] = options.params[i]; } } var variables:URLVariables = new URLVariables(); for (var j: String in request_params) { variables[j] = request_params[j]; } variables['sig'] = _generate_signature(request_params); var request:URLRequest = new URLRequest(); request.url = API_SERVER_URL; request.method = URLRequestMethod.POST; request.data = variables; var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.TEXT; loader.addEventListener(Event.COMPLETE, function(e:Event){ var loader:URLLoader = URLLoader(e.target); _data = JSON.decode(loader.data); for (var t:String in _data) trace (t + " = " + _data[t]); }); try { loader.load(request); } catch (error:Error) { trace ("Can't load url!"); } } /******************** * Private methods ********************/ /** * Generates signature * */ private function _generate_signature(request_params): String { var signature = ""; var sorted_array: Array = new Array(); for (var key in request_params) { sorted_array.push(key + "=" + request_params[key]); } sorted_array.sort(); // Note: make sure that the signature parameter is not already included in // request_params array. for (key in sorted_array) { signature += sorted_array[key]; } signature = _viewer_id + signature + _api_secret; return MD5.encrypt(signature); } } } |
|
|||||
Регистрация: Dec 2008
Сообщений: 12
|
Пожалуйста приведите простой пример создание диспатчера для лоадера.. Заранее благодарен!
Добавлено через 1 час 4 минуты После некоторых колдований получилось всё, что перечислено ниже. Но также получил ошибку: TypeError: Error #1009: Cannot access a property or method of a null object reference. at MethodInfo-2() at flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at flash.net::URLLoader/flash.net:URLLoader:nComplete() Содержимое класса: ppackage api { import flash.net.*; import flash.events.*; import api.serialization.json.*; public class DataProvider { public const API_SERVER_URL: String = "http://api.vkontakte.ru/api.php"; private var _data:Object; private var _api_id: Number; private var _api_secret: String; private var _viewer_id: Number; private var _test_mode: Boolean; public function DataProvider(api_id: Number, api_secret: String, viewer_id: Number, test_mode: Boolean = false) { _api_id = api_id; _api_secret = api_secret; _viewer_id = viewer_id; _test_mode = test_mode; } public function request(method: String, options: Object = null):void { var dispatcher:IEventDispatcher; var request_params: Object = {method: method}; if (options == null) { options = new Object(); } request_params.api_id = _api_id; request_params.format = "JSON"; if (_test_mode) { request_params.test_mode = "1"; } if (options.params) { for (var i: String in options.params) { request_params[i] = options.params[i]; } } var variables:URLVariables = new URLVariables(); for (var j: String in request_params) { variables[j] = request_params[j]; } variables['sig'] = _generate_signature(request_params); var request:URLRequest = new URLRequest(); request.url = API_SERVER_URL; request.method = URLRequestMethod.POST; request.data = variables; var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.TEXT; loader.addEventListener(Event.COMPLETE, function(e:Event){ var loader:URLLoader = URLLoader(e.target); _data = JSON.decode(loader.data); //for (var t:String in _data) trace (t + " = " + _data[t]); dispatcher.dispatchEvent (new Event ("Done")); }); try { loader.load(request); } catch (error:Error) { trace ("Can't load url!"); } } public function get returned():Object { return _data; } /******************** * Private methods ********************/ /** * Generates signature * */ private function _generate_signature(request_params): String { var signature = ""; var sorted_array: Array = new Array(); for (var key in request_params) { sorted_array.push(key + "=" + request_params[key]); } sorted_array.sort(); // Note: make sure that the signature parameter is not already included in // request_params array. for (key in sorted_array) { signature += sorted_array[key]; } signature = _viewer_id + signature + _api_secret; return MD5.encrypt(signature); } } } Что я сделал не так? Последний раз редактировалось FlashMania; 06.10.2009 в 17:39. |
|
|||||
var request:URLRequest = new URLRequest(); request.url = блаблабла; request.method = URLRequestMethod.POST; request.data = блаблабла; var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.TEXT; loader.addEventListener(Event.COMPLETE, onRequestCompleate); try { loader.load(request); } catch (e:Error) { //блаблабла } } private function onRequestCompleate(event:Event):void { urlLoader = event.target as URLLoader; dispatchEvent(event); } Последний раз редактировалось Anton Riot; 07.10.2009 в 20:28. Причина: теги забыл |
Часовой пояс GMT +4, время: 23:24. |
|
« Предыдущая тема | Следующая тема » |
|
|