在Flex中使用HTTPService加载XML文件

在Flex中使用HTTPService加载XML文件,xml,apache-flex,datagrid,httpservice,Xml,Apache Flex,Datagrid,Httpservice,因此,我一直在尝试将XML文件中的数据加载到datagrid中。该项目在Cairngorm框架中。XML文件位于web内容文件夹中。我在Services文件夹中有一个HTTPService调用 <mx:HTTPService id = "getCategory" url = "assets/CategoryDept21Class1.xml" resultFormat = "e4x" /> 这就是我在委托中定义getCa

因此,我一直在尝试将XML文件中的数据加载到datagrid中。该项目在Cairngorm框架中。XML文件位于web内容文件夹中。我在Services文件夹中有一个HTTPService调用

<mx:HTTPService
        id = "getCategory"
        url = "assets/CategoryDept21Class1.xml"
        resultFormat = "e4x"
        />
这就是我在委托中定义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文件中的数据读入datagrid。这是我在这个网站上的第一个问题,我不知道我的问题是否清楚。但是我该怎么做呢?谢谢:)

这个问题很清楚,但您可能有更多有用的信息。我将试图通过一系列问题来阐明这些问题。(这可能属于注释,但存在大小限制,可能会变得繁琐)

1-我希望您能够在您的代表中获得HttpService的引用

2-我希望您能够一直调试到异步服务调用完成为止

3-我假设从未调用结果回调函数。(或在这方面的过失)

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

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

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

如果我的任何假设是错误的,请填写必要的信息。另外,请提供FlexSDK版本


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

我看不到您在任何地方为数据提供程序(类列表)赋值。还是我错过了呢?在result()中去掉roottag-resultSet是有效的!谢谢你!
public function getCategory() : void
        {
            service = ServiceLocator.getInstance().getHTTPService("getCategory") as HTTPService;
            //Alert.show(service.url);
            var token : AsyncToken = service.send();
            token.addResponder(responder);
        }   
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));

    }