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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

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

Регистрация: Oct 2006
Сообщений: 10
Tip чтение из AMF

Доброго времени.
Работаю со связкой MySQL-> AMF(PHP) -> AS3, а имменно:

1. В РНР-файле (" getdata.php ") класс, где описываются методы-SQL-запросы.
2. Класс amf.as - класс, где описан метод доступа к " getdata.php ":
Код AS3:
package {
import flash.net.Responder; 
import flash.net.NetConnection; 
 
public class Amf {
 private var nc : NetConnection = new NetConnection();  //--
 
 public function Amf(hostname:String) {
  nc.connect(hostname+"/amfphp/gateway.php");  //--коннектимся к серверу и к обработчику amf 
  nc.objectEncoding=3; //--метод кодирования
 }
/**
*Выполняет запросы к amfphp
* wht - сервис и имя запрашиваемой функции (дальше в примере покажу)
* cb - функция, вызываемая при получении ответа
* args - аргументы, которые должны передаться запрашиваемой функции от серверного скрипта, указываются через запятую) т.е. может быть хоть один хоть десять.
*/
 public  function toamf(wht:String, cb : Function, ... args) : void {
  var resp : Responder = new Responder(cb, onFault); //--обработчик ответа сервера, если все ок, то вызываем переданную нам  функцию для ответа (cb), если нет, то функцию сообщения об ошибке.
  nc.call.apply(null,[wht,resp].concat(args)); //--немного непонятно, но вкратце: запускаем функции отсылания запроса на сервер, задаем функцию обратного вызова и параметры + функцию при ошибке выполнения. 
 }  
 private function onFault(res:Object):void { //--при ошибке выполнения запроса
   trace('К севраку не достучались, ответ: ',res);
 }  
}
}
3. Собственно рабочий AS3 ("amftest.as"):
Код AS3:
package {
import flash.display.MovieClip;
import Amf; //--подключаем наш класс
 
public class Amftest extends MovieClip {
 public function Amftest() {
  var amf:Amf=new Amf("http://myservername.ru"); 
  amf.toamf("amftest.getnews.getnews", onGetNews);
  /* в " getdata.php " описана функция: 
        function getnews() { //--выбираем все новости
           return mysql_query('select * from news');
        }
 */
 }
 
 public function onGetNews(o:Object) { 
  trace(o.serverInfo.initialData); 
 }
 
}
}
Рабоает идеально. Вопрос с последним, рабочим AS: как воспользоватся полученными данными? Т.е. получить данные в переменную:
Код AS3:
var result:Object;
.....
 public function onGetNews(o:Object) { 
  result = o;
 }
.....
trace (result);
и становится очевидно, что result ни капли не изменился, т.к. я его вызываю, а onGetNews ещё не сработал.
__________________
Ёж в противогазе


Последний раз редактировалось cn_snipes; 09.02.2010 в 14:52.
Старый 09.02.2010, 15:25
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Вы сами же и ответили на свой вопрос:
Цитата:
и становится очевидно, что result ни капли не изменился, т.к. я его вызываю, а onGetNews ещё не сработал.
Ничего не мешает воспользоваться данными в onGetNews... Или вызвать какие-то определенные методы для обработки этих данных там же.

Старый 09.02.2010, 18:07
cn_snipes вне форума Посмотреть профиль Отправить личное сообщение для cn_snipes Найти все сообщения от cn_snipes
  № 3  
Ответить с цитированием
cn_snipes

Регистрация: Oct 2006
Сообщений: 10
О как бы я хотел ответить на вопрос, курсовая горит ))
Тем не более вопрос остается прежним: как воспользоватся полученными данными?
Думаю тут вопрос не столько в специфике AMF, сколько в опыте вледания AS3 - у меня его мало, вот я его и увеличиваю ).
Хорошо бы было заставить возвращать искомые данные метод amf.toamf("amftest.getnews.getnews", onGetNews), но как? Пробывал по всякому
__________________
Ёж в противогазе

Старый 09.02.2010, 18:13
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 4  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
Тем не более вопрос остается прежним: как воспользоватся полученными данными?
Ну так пользуйтесь. Кто не дает?

Цитата:
Хорошо бы было заставить возвращать искомые данные метод amf.toamf("amftest.getnews.getnews", onGetNews), но как? Пробывал по всякому
Код выполняется асинхронно, в данном случае. Невозможно сделать то, что вы хотите.

Старый 09.02.2010, 18:40
cn_snipes вне форума Посмотреть профиль Отправить личное сообщение для cn_snipes Найти все сообщения от cn_snipes
  № 5  
Ответить с цитированием
cn_snipes

Регистрация: Oct 2006
Сообщений: 10
Цитата:
Сообщение от udaaff Посмотреть сообщение
Невозможно сделать то, что вы хотите.
udaaff вы жестоки :'''(( . Раз так скажите, а нельзя ли как нибудь дождаться значения? Всмысле для AS2 был стандартный механизм для работы с XML :
Код AS1/AS2:
var xml:XML = new XML();
xml.ignoreWhite = true;
xml.onLoad = function(success){
if (!success){
 trace("Не смогли загрузить данные :'(");
 return;
}
есть что нить применимое в этой ситуации?
__________________
Ёж в противогазе

Старый 09.02.2010, 18:52
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 6  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Цитата:
Сообщение от cn_snipes Посмотреть сообщение
udaaff вы жестоки :'''(( . Раз так скажите, а нельзя ли как нибудь дождаться значения? Всмысле для AS2 был стандартный механизм для работы с XML :
Код AS1/AS2:
var xml:XML = new XML();
xml.ignoreWhite = true;
xml.onLoad = function(success){
if (!success){
 trace("Не смогли загрузить данные :'(");
 return;
}
есть что нить применимое в этой ситуации?
Этот код работает точно также, как и предыдущий. Здесь не записывается результат выполнения функции (т.к. обработчики событий не возвращают ничего по определению), а записывается ссылка на функцию-обработчик события onLoad, а return используется лишь для остановки выполнения функции.

Старый 09.02.2010, 19:20
cn_snipes вне форума Посмотреть профиль Отправить личное сообщение для cn_snipes Найти все сообщения от cn_snipes
  № 7  
Ответить с цитированием
cn_snipes

Регистрация: Oct 2006
Сообщений: 10
пасибо. Буду пробывать
__________________
Ёж в противогазе

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:42.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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