Загрузка XML-файла с помощью HTTPService в Flex

Итак, я пытался загрузить данные из файла XML в сетку данных. Проект находится в рамках Cairngorm. XML-файл находится в папке веб-материалов. У меня есть вызов HTTPService в папке Services.

<mx:HTTPService
        id = "getCategory"
        url = "assets/CategoryDept21Class1.xml"
        resultFormat = "e4x"
        />

Когда я делаю выбор в одном dataGrid, он должен заполнить другой dataGrid данными из XML-файла. Ниже приведена сетка данных классов. Когда я нажимаю на класс, он должен заполнить следующую сетку данных.

<mx:DataGrid rowCount="10" enabled="true"
         dataProvider="{classList}"
         verticalScrollPolicy="on"
         click = "onClass()"
         id="classes" width="192" top="73" left="253" height="225">
        <mx:columns>
            <mx:DataGridColumn headerText="#" dataField="merchandiseClassNumber" width="50"/>
            <mx:DataGridColumn headerText="Class Name" dataField="merchandiseClassDescription" width="150"/>
        </mx:columns>
    </mx:DataGrid>

Это методы, которые будут запускаться.

private function selectClass(evt:ResultEvent):void{
                //this.categoryList = new XMLListCollection(evt.result.resultSet);
                this.categoryList= evt.result.resultSet.MerchandiseAssortmentCategory;
                var request:AMTCategoryEvent;
                CairngormEventDispatcher.getInstance().dispatchEvent(request);

            }

            private function onClass():void{
                //Alert.show("you just clicked on a class ");
                var event:AMTCategoryEvent = new AMTCategoryEvent();
                CairngormEventDispatcher.getInstance().dispatchEvent(event);
            }

вот как я определил getCategory () в своем делегате

public function getCategory() : void
        {
            service = ServiceLocator.getInstance().getHTTPService("getCategory") as HTTPService;
            //Alert.show(service.url);
            var token : AsyncToken = service.send();
            token.addResponder(responder);
        }   

и это то, что у меня есть в моем getCategoryCommand.

public function execute(event: CairngormEvent) : void{
            var categoryEvent: AMTCategoryEvent = event as AMTCategoryEvent;
            var deleg:Delegate = new Delegate(this);
            deleg.getCategory();
            //deleg.getCategory(categoryEvent.deptNumber, categoryEvent.classNum);
        }

        public function result(info:Object) :void{
            trace("Get Category: Success");
        //  __model.categoryList = new XMLList(info.result.resultSet.MerchandiseAssortmentCategory);
            var xmlbleh:XMLList=info.result.resultSet.MerchandiseAssortmentCategory.lastResult;
            mx.controls.Alert.show(xmlbleh.toXMLString());
            __model.categoryList = new XMLListCollection(XMLList(info.result.resultSet.MerchandiseAssortmentCategory.lastResult));

    }

По какой-то причине он не считывает данные из XML-файла в сетку данных. Это мой первый вопрос на этом сайте. Я не знаю, ясен ли мой вопрос. Но как мне это сделать? Спасибо :)


person girl_coder    schedule 27.06.2011    source источник
comment
Я не вижу, чтобы вы где-либо присваивали значение своему поставщику данных (classList). Или я это пропустил?   -  person The_asMan    schedule 28.06.2011


Ответы (1)


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

1- Я надеюсь, что вам удалось получить ссылку на HttpService в вашем делегате.

2- Я надеюсь, что вам удалось отладить до тех пор, пока не будет выполнен вызов службы async.

3- Я предполагаю, что функция обратного вызова результата никогда не вызывается. (или вина в этом отношении).

4- Я предполагаю, что приложение развернуто на веб-сервере.

Если все мои предположения верны, то проблема могла быть в формировании url. Я предполагаю, что вы пытаетесь указать относительный путь, но я постараюсь указать абсолютный URL. Если проблема связана с URL-адресом, то вызов службы должен был быть зарегистрирован в вашем фоновом режиме, и вы должны увидеть сообщение об ошибке, например 404).

Если сообщений об ошибках нет, это может быть ошибкой безопасности. Вы предоставили файл междоменной политики?

Если какое-либо из моих предположений неверно, внесите необходимую информацию. Также укажите версию Flex SDK.

Примечание. В случае, если вы запускаете это как отдельное приложение, существует ограничение безопасности, которое не позволит вам читать из файловой системы, если вы не предоставите дополнительные атрибуты в Flash Builder.

person uncaught_exceptions    schedule 27.06.2011
comment
избавление от корневого тега - resultSet в result () сработал! Спасибо хоть! - person girl_coder; 28.06.2011