Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Потеря данных (http://www.flasher.ru/forum/showthread.php?t=177719)

Чеширский Кот 06.04.2012 18:57

Потеря данных
 
Здравствуйте!

БД (база даных) <----> CF(ColdFusion 9) <-----> Приложение (main.swf)

Флешка (main.swf) лежит на сервере. Запускаю ее удаленно http://192.168.111.1/dev/main.swf с локальной машины.

1) Флешка открывается, в ней есть форма. Данные формы сохраняются и записываются в БД. Закрыли форму.
2) Открыли ее вновь и данные (которые сейчас заполняли) должны были загрузиться и отобразиться в форме.
Но этого не случилось.
Тест показал, что после запроса(на получение данных для формы из БД) данные получены CF и отправлены во флешку, но во флешку уже приходит пустой запрос, т.е. данные потерялись на этапе
CF(ColdFusion 9) -----> Приложение (main.swf)
есть данные нет данных

Локально все хорошо.

Видимо проблема с серваком, но если напрямую указать путь, например к фото на серваке (которое было загружено ранее), то она отобразится в форме, т.е. не приходят именно данные почему-то...

Из-за чего они могут не доходить до адресата?

на серваке: IIS 6.0, Windows 2003
C:\Inetpub\wwwroot\dev\main.swf


Причем ответ приходит в виде ac:ArrayCollection.
ac[0] - Object с кучей подданных, если можно так выразиться.
Так вот, когда все хорошо, то данные в Object есть.
А когда все плохо, то именно ДАННЫХ в Object нет.
А ас[0] приходит, но без данных.
Грешил, что сервак данные /"не отдает/", но ведь пользователь проверку (логин/пароль) проходит.
А уже потом заполняет форму.

Чеширский Кот 11.04.2012 16:41

Тут сало веселее...

Добавил в форму, для теста, DataGrid и привязал к нему напрямую вызов этого метода, который с пустыми данными приходит.
И что вы думаете? В таблице они отображаются!
relative.cfc (здесь хранятся методы для работы с БД).


Код AS3:

public var relatives:Relatives = new Relatives();
 
 
protected function init():void
{
      relatives.addEventListener(ResultEvent.RESULT, onResult_relatives);
      relatives.addEventListener(FaultEvent.FAULT, onFault_relatives);
}
 
protected function getRelativeById(IdRelative:Number):void
{
      relatives.getRelativeById(IdRelative);
}
 
private function onResult_relatives(event:ResultEvent):void
{
      // здесь ловлю данные
      var ac:ArrayCollection = new ArrayCollection();
      ac = event.currentTarget.operations.getRelativeById.lastResult;
      var obj:Object = ac.getItemAt(0);
 
      // и уже из obj получаю локально данные, а на серваке приходят "undefined"
      // локально: obj.name = "Иван"; на серваке obj.name = "undefined"
}



К тому же так же решил прослушать и DataGrid... результат тоже "undefined", но данные в таблице!
Что за "мистика"!?

Добавлено через 19 часов 9 минут
У меня ощущение, что проблема с типами данных...

Добавлено через 22 часа 42 минуты
Может беда взаимосвязи между сервером и флешкой?

Коммуникация между сервером и флешем происходит благодаря ColdFusion.
В частности к файлу relative.cfc, который привязан к приложению.
Как сделано здесь:
пример

Вот через это (Данные/службы в Flash Builder 4)
[IMG]http://s2.************/uploads/20120412/QGo36xr9.png[/IMG]

А отсюда сделал у себя DataGrid для теста в форме
пример2



Кстати, сделал тип данных : RelativeDataType (как видно из картинки)
И после этого данные в DataGrid перестали правильно отображаться (приходят только нули в столбцы (idrelative:int и iduser:int),
т.е. там где тип данных int - приходит ноль. А в остальные пусто(null) ).

Здесь возвращаемый тип данных RelativeDataType у метода (relatives.getRelativeById(IdRelative))
Стало так:
[IMG]http://s1.************/uploads/20120412/zT1BUUZ0.png[/IMG]


Здесь возвращаемый тип данных Object у метода (relatives.getRelativeById(IdRelative))
А было так:
[IMG]http://s2.************/uploads/20120412/ZoWLf54m.png[/IMG]

Вот поэтому и грешу на типы данных.

Вот в чем может быть беда? По ощущением какая-то фигня, может разрешение где приписать надо, видимо на серверной стороне не знают, что такое за тип данных RelativeDataType. Как серверу об этом узнать? Или может в чем-то другом беда...

Добавлено через 25 часов 48 минут
Код:

<cffunction name="getRelativeByIdFirstname" output="false" access="remote" returntype="any" >
        <cfargument name="IdRelative" required="yes" type="numeric"/>       
                 
        <cfset var qGetRelativeByIdFirstname="">
        <cfquery name="qGetRelativeByIdFirstname" datasource="familytreeSource">
                SELECT IdRelative,FirstName,IdUser
                FROM relatives
                WHERE IdRelative = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#IdRelative#">       
        </cfquery>
        <cfreturn qGetRelativeByIdFirstname.FirstName>
</cffunction>

Вот метод, который забирает простой тип данных. В данном случае получаю Имя.
А когда я пытаюсь передать свой тип данных - пользовательский (RelativeDataType) , то беда.
Надо разобраться, каким образом сервер должен узнавать о пользовательских типах данных.

Добавлено через 42 часа 42 минуты
Проблема решилась профилированием кода с 1 ночи и до 8 утра.
В результате метод, который работал, дома после правки кода, стал неадекватно работать - перестал доходить до места, где заполнял таблицу данными. Это первое.
А второе, что могло быть... на локалке сервер C:\ColdFusion9\wwwroot и cfc файлы там же, а на серваке это C:\Inetpub\wwwroot
может и из-за этого что пути разные были, но вряд ли.
А третье, это Данные/службы в Flash Builder : сначала тестовый пример, который билдер предлагает сделать, через RDS. А уже потом в получившейся cfc файл добавил свои методы. И скорее всего из-за этого была проблема.


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

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