![]() |
|
||||||||||
|
|||||
|
Регистрация: Jan 2009
Сообщений: 25
|
Существует класс:
package visualization { import flash.events.Event; import flash.net.*; public class Main { public function Main(){ // Конструктор } public function GetResultPHP(){ var host:String = "http://xxx"; var variables:URLVariables = new URLVariables("name=Franklin123"); var myRequest:URLRequest = new URLRequest(); myRequest.method = URLRequestMethod.POST; myRequest.url = host + "/ascript.php"; myRequest.data = variables; var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.BINARY; //out_txt.text = myData.firstName+' \n' + myData.lastName; loader.addEventListener(Event.COMPLETE, completeHandler); try { loader.load(myRequest); //Посылаем данные } catch (error:Error) { trace('Error: answer'); } } public function completeHandler(event:Event):void //Эта функци вызывается когда произошёл ответ от сервера. loader.load(myRequest); { var array:Object = JSON.parse(event.target.data); // преобразовываем JSON в OBJECT var lenght:int = 0; for each (var i:* in array) { lenght++ } array.lenght = lenght; this.resultLoad(array); } private function resultLoad(dataSet:Object):Object{ // Метод для возврата результата //trace(JSON.stringify(dataSet)); return dataSet; } } } Далее в первом кадре своего проекта делаю так: import visualization.Main; var res:Main = new Main(); var objRes:Object = res.GetResultPHP(); trace(objRes); Если сделать trace в классе Main() всё всё работает - как из него вернуть данные? Что я забыл сделать? Спасибо! |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 1,540
|
Потому что сначала надо уроки посмотреть по программированию или что.
Функция GetResultPHP() ничего не возвращает, потому что загрузка не выполняется сразу. Цитата:
Вообще у вас какой-то странный код, не пойму что он делает. package visualization { import flash.events.Event; import flash.net.*; public class Main { public var data:Object; public function Main(){ // Конструктор } public function GetResultPHP(){ var host:String = "http://xxx"; var variables:URLVariables = new URLVariables("name=Franklin123"); var myRequest:URLRequest = new URLRequest(); myRequest.method = URLRequestMethod.POST; myRequest.url = host + "/ascript.php"; myRequest.data = variables; var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.BINARY; //out_txt.text = myData.firstName+' \n' + myData.lastName; loader.addEventListener(Event.COMPLETE, completeHandler); try { loader.load(myRequest); //Посылаем данные } catch (error:Error) { trace('Error: answer'); } } public function completeHandler(event:Event):void //Эта функци вызывается когда произошёл ответ от сервера. loader.load(myRequest); { var array:Object = JSON.parse(event.target.data); // преобразовываем JSON в OBJECT var length:int = 0; for each (var i:* in array) { length++ } array.length = length; this.resultLoad(array); } private function resultLoad(dataSet:Object):Object{ // Метод для возврата результата data = dataSet; return dataSet; } } } Делайте события, короче. Добавлено через 47 секунд И как вообще вы добавляете главный класс? |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 25
|
Да ошибочка с length ))).
Данный скрипт лезет на сервер достаёт от туда массив в JSON. И должен вернуть его. Как я это понимаю: Вызываю объект класса в первом кадре своего проекта (по кнопочке F9). Там же вызываю метод который должен вернуть результат. Я только не понимаю почему функция ничего не возвращает? Срабатывает completeHandler в котором вызывается resultLoad в который передаётся объект - он то и должен вернуть результат. |
|
|||||
|
Banned
[+5 04.06.13]
[+1 08.06.13] Регистрация: May 2013
Сообщений: 52
|
Цитата:
Потому что функция startGetNumber ничего не возвращает. |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 25
|
Ничего не понимаю ((( Как же мне быть в таком случае? Как получить данные ?
Вы привели примитивные примеры ))) Тут всё ясно. Что надо сделать и где выполнить return данных в моём случае? Добавлено через 1 час 7 минут Покурив доки - понял, что проблема в асинхронности. Функция GetResultPHP всегда будет возвращать null. Буду курить дальше доки на тему асинхронности. Добавлено через 63 часа 26 минут Люди поможите, перелопатил все доки, ничего не понял в этой асинхронности ((( Повторю ещё раз на простом примере: Есть собственный класс в котором выполняется запрос на сервер и там получается ответ структура вот такая (для упрощения). class main { function getResultPHP(){ //тут происходит настройка параметров для отправки на сервер с помощью URLLoader /// далее обработчик события на загрузку loader.addEventListener(Event.COMPLETE, completeHandler); } public function completeHandler(event:Event):void // { var array:Object = JSON.parse(event.target.data); // преобразовываем JSON в OBJECT /// если тут сделать trace то всё выводиться, но мне надо вернуть объект из этой функции. return array; } } import visualization.Main; var res:Main = new Main(); var r:Object = res.GetResultPHP(); trace(r); // Как получить результат из моего класса из функции getResultPHP()? Я понимаю почему функция не возвращает результат, но как мне дождаться ответа с сервера, а потом вернуть результат? Не могу никак понять как это работает в AS3. Ткните если не сложно на доку, где подробно описано данное хозяйство. Срок идёт, а я застрял на примитивной фигне (((( Заранее благодарен. Добавлено через 67 часов 59 минут После 29 раза прочтения оф-доки разобрался самостоятельно! Использовал dispatchEvent ! Последний раз редактировалось n_drey; 07.06.2013 в 19:43. |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:32. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|