在Flex中使用HTTPService加载XML文件

时间:2011-06-27 20:09:43

标签: xml flex datagrid httpservice

所以我一直在尝试将XML文件中的数据加载到数据网格中。该项目位于Cairngorm框架内。 XML文件位于Web内容文件夹中。我在Services文件夹中有一个HTTPService调用。

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

当我在一个dataGrid中进行选择时,应该使用XML文件中的数据填充另一个dataGrid。下面是Classes datagrid。当我点击一个类时,它应该填充下一个数据网格。

<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 个答案:

答案 0 :(得分:1)

问题很清楚,但您可能有额外的信息可能有用。我将尝试通过一系列问题来阐明这些问题。 (这可能属于评论,但存在大小限制,可能会变得很麻烦)

1-我希望你设法在你的委托中获得HttpService的引用。

2-我希望您能够调试,直到进行异步服务调用。

3-我假设从不调用结果回调函数。 (或者就此而言是错误的。)

4-我假设应用程序部署在Web服务器中。

如果我的所有假设都是正确的,那么问题可能在于url的形成。我假设您正在尝试提供相对路径,但我会尝试提供绝对URL。如果问题在于url,那么服务调用应该已经记录在你的背景中,你应该看到一条错误消息,如404)。

如果没有明显的错误消息,则可能是安全错误。您是否提供了跨域策略文件。

如果我的任何假设有误,请填写必要的信息。另请提供Flex SDK版本。

注意:如果您将其作为独立应用程序运行,则除非您在Flash Builder中提供其他属性,否则存在不允许您从文件系统读取的安全约束。