繁体   English   中英

在Flex中使用HTTPService加载XML文件

[英]Loading XML file using HTTPService in Flex

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

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

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

<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文件中的数据读取到datagrid中。 这是我在这个网站上的第一个问题,如果问题明确,我不知道。 但是我该怎么办呢? 谢谢 :)

这个问题很清楚,但是您可能还有其他有用的信息。 我将尝试通过一系列问题来阐明这些问题。 (这可能属于注释,但是这里有大小限制,可能会变得很麻烦)

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

2-我希望您设法调试到进行异步服务调用为止。

3-我假设永远不会调用结果回调函数。 (或对此事的过错)。

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

如果我所有的假设都是正确的,那么问题可能出在url的形成上。 我假设您正在尝试提供相对路径,但是我将尝试提供绝对URL。 如果问题出在网址上,则应该在后台记录该服务调用,并且您应该会看到类似404的错误消息。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM