Загрузка XML-файла с использованием HTTPService во Flex - PullRequest
0 голосов
/ 28 июня 2011

Итак, я пытался загрузить данные из файла 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 не считываются в сетку данных.Это мой первый вопрос на этом сайте, я не знаю, если мой вопрос ясен.Но как мне это сделать?Спасибо:)

1 Ответ

1 голос
/ 28 июня 2011

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

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

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

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

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

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

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

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

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

...