![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Доброго времени суток, форумчане. Почитал форум, но ответа на свой вопрос не нашел, посему вот:
Есть класс PHPTransfer package main.db { import flash.net.URLVariables; import flash.net.URLRequest; import flash.net.URLRequestMethod; import flash.net.URLLoader; import flash.events.Event; public class PHPTransfer extends Object { public var site_path:String; // Должен заканчиваться на '/' public var script_path:String; // Относительно site_path public var php_response:String = ""; public var OnComplete:Event; public function PHPTransfer() { } public function _POST(vars:URLVariables) { var req:URLRequest = new URLRequest(site_path + script_path); req.data = vars; req.method = URLRequestMethod.POST; var loader:URLLoader = new URLLoader(); trace("Загрузка данных..."); loader.load(req); loader.addEventListener(Event.COMPLETE, _complete); return loader.data; function _complete(ev:Event) { //php_response = ev.target.data; trace("Данные загружены!"); ev.target.removeEventListener(Event.COMPLETE, _complete); } } } } function btn_onclick(me:MouseEvent) { var php:PHPTransfer = new main.db.PHPTransfer; var vars:URLVariables = new URLVariables; vars.id = 1; php.site_path = "http://domain.com/"; php.script_path = "index.php"; var res = php._POST(vars); trace(res); }
Т.е. ответ от рнр приходят позже, чем используются в функции. Как решить данную проблему? |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
АСИНХРОННОСТЬ и СОБЫТИЯ
и АНОНИМНЫЕ ФУНКЦИИ - ЗЛО (во всяком случае в ActionScript)
__________________
Отряд Котовскага |
|
|||||
|
Спасибо за оперативность. Понятно что асинхронность, вопрос как с ней бороться. Если все вышенаписанное делать не через класс а внутри функции - работает нормально, результат получаю из события COMPLETE. А как того же добиться внутри класса, чтоб _POST возвращал значение ПОСЛЕ того как оно прийдет от рнр?
Простите за возможно глупые вопросы, но я только начинаю разбираться с флешем и ас3, так что многие моменты не понятны в корне. |
|
|||||
|
Эм, что вы подразумеваете под анонимными функциями? Можно подробнее?
Точнее даже не что подразумеваете, а что именно хотели этим сказать? что их надо или НЕ надо использовать? и где? Добавлено через 14 часов 12 минут ребят, вы хоть подтолкните в нужном направлении Последний раз редактировалось Ookami; 31.08.2011 в 12:23. |
|
|||||
|
Вот один из вариантов решения проблемы:
private var res:*; function btn_onclick(me:MouseEvent):void { var php:PHPTransfer = new main.db.PHPTransfer; php.addEventListener(PHPTransfer.COMPLITE, PHPComplite); // слушаем окончание загрузки var vars:URLVariables = new URLVariables; vars.id = 1; php.site_path = "http://domain.com/"; php.script_path = "index.php"; //var res = php._POST(vars); php._POST(vars); } private function PHPComplite(e:Event):void { res = php.getData(); trace("new result "+res); } package main.db { import flash.net.URLVariables; import flash.net.URLRequest; import flash.net.URLRequestMethod; import flash.net.URLLoader; import flash.events.Event; public class PHPTransfer extends Object { public static var COMPLITE:String = "complite"; public var site_path:String; // Должен заканчиваться на '/' public var script_path:String; // Относительно site_path public var php_response:String = ""; public var OnComplete:Event; private var loader:URLLoader = new URLLoader(); // loader переносим сюда, чтоб был доступен для всего класса public function PHPTransfer() { } public function _POST(vars:URLVariables) { var req:URLRequest = new URLRequest(site_path + script_path); req.data = vars; req.method = URLRequestMethod.POST; //var loader:URLLoader = new URLLoader(); trace("Загрузка данных..."); loader.load(req); loader.addEventListener(Event.COMPLETE, _complete); //return loader.data; function _complete(ev:Event) { //php_response = ev.target.data; trace("Данные загружены!"); dispatchEvent(new Event(COMPLITE)); // сообщаем что загрузка завершена ev.target.removeEventListener(Event.COMPLETE, _complete); } } public function getData():* { return loader.data; } } } |
|
|||||
|
Цитата:
2. return loader.data - data здесь еще не готова, она будет готова только в _complete
__________________
adobe AS3 manual Последний раз редактировалось strangedk; 12.11.2011 в 03:45. |
![]() |
![]() |
Часовой пояс GMT +4, время: 15:49. |
|
|
« Предыдущая тема | Следующая тема » |
|
|