Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.10.2009, 13:50
FlashMania вне форума Посмотреть профиль Отправить личное сообщение для FlashMania Найти все сообщения от FlashMania
  № 1  
Ответить с цитированием
FlashMania
 
Аватар для FlashMania

Регистрация: Dec 2008
Сообщений: 12
Attention Проблема вывода данных методом URLLoader

Здраствуйте! Я создаю класс для vkontakte.ru и наткнулся на проблему. Мне нужно вывести из класса return'ом загруженные данные, однако URLLoader не успевает подгрузить все данные. Скажите пожалуйста как это сделать?
вот скриптик, который я мнемного сплагиатил...
Код AS3:
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);
    }
  }
}

Старый 06.10.2009, 16:23
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Подписаться на события от лоадера и читать про EventDispatcher и Even классы в мануале.
__________________
Hell is the possibility of sanity

Старый 06.10.2009, 16:33
FlashMania вне форума Посмотреть профиль Отправить личное сообщение для FlashMania Найти все сообщения от FlashMania
  № 3  
Ответить с цитированием
FlashMania
 
Аватар для FlashMania

Регистрация: 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()


Содержимое класса:

Код AS3:
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);
    }
  }
}
Содержимое флэшки:

Код AS3:
import api.DataProvider;
 
var d:Object;
var s:DataProvider = new DataProvider (1501668, "LHHc2CZd7r", 413995, true);
s.request ("getFriends");
 
root.addEventListener ("Done", function () {trace(s.returned);});
Что я сделал не так?


Последний раз редактировалось FlashMania; 06.10.2009 в 17:39.
Старый 07.10.2009, 20:21
Anton Riot вне форума Посмотреть профиль Отправить личное сообщение для Anton Riot Посетить домашнюю страницу Anton Riot Найти все сообщения от Anton Riot
  № 4  
Ответить с цитированием
Anton Riot

Регистрация: Sep 2008
Адрес: Москва
Сообщений: 291
Отправить сообщение для Anton Riot с помощью ICQ
Код AS3:
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, время: 12:05.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:05.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.