【问题标题】:Loading XML file using HTTPService in Flex在 Flex 中使用 HTTPService 加载 XML 文件
【发布时间】:2011-09-23 19:26:12
【问题描述】:

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

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

当我在一个 dataGrid 中进行选择时,它应该使用 XML 文件中的数据填充另一个 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 文件中的数据读入数据网格。这是我在这个网站上的第一个问题,我不知道我的问题是否清楚。但我该怎么做呢?谢谢:)

【问题讨论】:

  • 我没有看到你在任何地方为你的 dataprovider(classList) 赋值。还是我错过了?

标签: xml apache-flex datagrid httpservice


【解决方案1】:

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

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

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

3- 我假设结果回调函数永远不会被调用。 (或这件事的错)。

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

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

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

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

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

【讨论】:

  • 摆脱 roottag - result() 中的 resultSet 有效!不过谢谢!
猜你喜欢
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
相关资源
最近更新 更多