0

我正在尝试从 Web 服务接收数据,并且我正在从 Web 服务获取数据,但它是[object Object]. 任何人都可以帮我解决这个问题。

下面是我的网络服务的代码:

public class WebServiceAccess
{

    private var webService:WebService;
    private var serviceOperation:AbstractOperation; 
    private var myValueObjects:ValueObjects;

    private var method:String;

    [Bindable]
    public var employeeData:ArrayCollection;
    [Bindable]
    public var employees:ArrayCollection;

    public function WebServiceAccess(url:String, method:String)
    {
        webService = new WebService();
        this.method = method;
        webService.loadWSDL(url);
        webService.addEventListener(LoadEvent.LOAD, ServiceRequest);
    }

    public function ServiceRequest():void
    {
        serviceOperation = webService.getOperation(method);
        serviceOperation.addEventListener(FaultEvent.FAULT, DisplayError);
        serviceOperation.addEventListener(ResultEvent.RESULT, DisplayResult); 
        serviceOperation.send(); 
    }

    public function DisplayError(evt:FaultEvent):void
    {
        Alert.show(evt.fault.toString());
    }

    public function DisplayResult(evt:ResultEvent):void
    {   
        employeeData = evt.result as ArrayCollection;
        Alert.show(employeeData.toString());
    }
}
4

1 回答 1

3

首先,evt.result不是一个 ArrayCollection,它是一个对象(除非您的 SOAP 服务/WSDL 完全搞砸了/格式错误的 XML)。

其次,无论如何,您不能只将 Array 或 ArrayCollection(或通用对象)显示为字符串(即使 .toString() 方法似乎总是暗示这一点),您必须解析数据以获得您想要的从中。

现在,WebService 类很好,因为它自动将 SOAP 服务返回的 XML 文件解析为单个可用对象。所以这实际上是困难的部分。

你需要做的是调用对象的各种属性来获取你需要的数据。

因此,如果 XML 返回(查看您的 WSDL 以了解返回应该是什么,我也强烈建议使用 soapUI)是这样的:

<employee name="Josh">
    <start date="89384938984"/>
    <photo url="photo.jpg"/>
</employee>

你想显示“Josh”和照片,你会这样做。

var name:String = e.result.employee.name;
var url:String = e.result.employee.photo.url;

它确实变得更加复杂。如果 WSDL 允许在同一级别具有相同名称的多个节点,它确实返回一个 ArrayCollection。然后你必须遍历数组并找到你需要的确切项目。

请记住:WSDL 就是上帝。时期。如果它说可以有多个“员工”节点,您必须相应地编码,即使您在测试中没有看到多个节点。问题是总是可能有多个节点。

于 2012-10-25T00:41:38.673 回答