Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проблемы с URLLoader (двойные переменные) (http://www.flasher.ru/forum/showthread.php?t=126449)

vvvvvvf 19.06.2009 12:42

Проблемы с URLLoader (двойные переменные)
 
Доброго времени суток.
Написал собственный класс для отправки и получения данных с сервера/на сервер

вот класс

Код AS3:

package main{
        import flash.display.Sprite;
        import flash.events.*;
        import flash.system.*;
        import flash.net.*;
 
        public class LoadData extends Sprite {
                private var Loader:URLLoader;
                private var Request:URLRequest;
                public var varTo:URLVariables;
                public var vars:URLVariables;
 
                public function LoadData():void {
                }
                public function setLoadData():void {
                        varTo = new URLVariables();
                }
                public function go(url:String):void {
                        System.useCodePage = true;
 
                        Request = new URLRequest(url);
                        Request.data = varTo;
                        Request.method = URLRequestMethod.POST;
 
                        Loader = new URLLoader();
                        Loader.dataFormat = URLLoaderDataFormat.VARIABLES;
                        Loader.load(Request);
                        Loader.addEventListener(Event.COMPLETE, completeHandler);
                        Loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
                        Loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
                }
                private function completeHandler(event:Event):void {
                        vars = new URLVariables(Loader.data);
                        clearEvents();
                        dispatchEvent(new Event('loadComplete'));
                }
                private function securityErrorHandler(event:SecurityErrorEvent):void {
                        clearEvents();
                }
                private function ioErrorHandler(event:IOErrorEvent):void {
                        clearEvents();
                }
                private function clearEvents():void {
                        Loader.removeEventListener(Event.COMPLETE, completeHandler);
                        Loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
                        Loader.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
                }
        }
}

вот как я его применяю на практике

Код AS3:

package main{
        import flash.display.*;
        import flash.events.*;
        import flash.utils.*;
        import flash.net.*;
 
        public class refrashBattle extends Sprite {
                private var connect:LoadData = new LoadData();
 
                public function refrashBattle():void {
                        doTime();
                }
                private function doTime():void {
                        connect.setLoadData();
                        connect.varTo.myName = 'Вася';
                        connect.varTo.myText = 'текст текст текст';
                        connect.go('http://localhost/1.php');
                        connect.addEventListener('loadComplete', contentBattle, false, 0, true);
 
                        intervalReftash = setTimeout(doTime, 5000);
                        trace('refrash');
                }
                private function contentBattle(event:Event):void {
                        connect.removeEventListener('loadComplete', contentBattle);
                        trace(connect.vars.toString())
                }
        }
}

Чтобы небыло лищних вопросов вот php файл, но проблема точно не в нем, так как в броузере все выводиться стабильно.

PHP код:

<?php
header
('Content-Type: text/html; charset=utf-8');

echo 
'newMyName='.$_POST['myName'];
echo 
'&newMyText ='.$_POST['myText'];
?>

Задача очень простая нужно каждые пять секунд обращаться к серверу и получать данные. В данном случае я отправляю две переменные myName и myText на локальный сервер и ответ от сервера вывожу через trace.

По началу все нормально, но потом скажем раз в 10-15 запусков (Ctrl+Enter), первый раз передаются двойные переменные вида
"newMyName=Вася&newMyName=Вася&newMyText=текст текст текст&newMyText=текст текст текст", а через 5 секунд когда идет повторная загрузка переменные передаються нормально, то есть только в первый раз (то есть при первом запуске флешьки) такая проблема и, то не чаще чем раз в 10-15 запусков.

Добавлено через 4 минуты
Разжую еще больше
Первый запуск
&newMyName=Вася&newMyText=текст текст текст
через 5 секунд
&newMyName=Вася&newMyText=текст текст текст
через 5 секунд
&newMyName=Вася&newMyText=текст текст текст
через 5 секунд
&newMyName=Вася&newMyText=текст текст текст

и т.д., но иногда раз в 10-15 запусков идет так

Первый запуск
newMyName=Вася&newMyName=Вася&newMyText=текст текст текст&newMyText=текст текст текст
через 5 секунд
&newMyName=Вася&newMyText=текст текст текст
через 5 секунд
&newMyName=Вася&newMyText=текст текст текст
через 5 секунд
&newMyName=Вася&newMyText=текст текст текст

alekslitvinenk 19.06.2009 13:14

попробуйте сделать так чтобы имя экземпляра класса URLLoader у вас не совпадало с названием нативного класса Loader

vvvvvvf 19.06.2009 13:40

Цитата:

Сообщение от alekslitvinenk (Сообщение 829245)
попробуйте сделать так чтобы имя экземпляра класса URLLoader у вас не совпадало с названием нативного класса Loader

В классе LoadData заменил везде Loader на myLoader, но результат тот же =(

alekslitvinenk 19.06.2009 13:49

у меня все работает ок

vvvvvvf 19.06.2009 13:54

может стоит перейти на XML как думаете?

alekslitvinenk 19.06.2009 21:10

Цитата:

может стоит перейти на XML как думаете?
Да, наверное..Это самый оптимальный вариант для отправки структурированного ответа клиенту.
Но в любом случае это не спасет от ошибок в коде.
Кстати, так и не смог воспроизвести тот баг.

Котяра 19.06.2009 23:37

2 vvvvvvf: соблюдайте конвенции наименований и, может быть, — будет Вам щастье.
ЗЫ: использовать служебные слова типа Loader и connect - не стоит (хто его знает как они по индусски понимаются)


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

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