数组可能是各种语言中最常见的一种数据类型了。下面我们来看一看在Flash与ws交互时如何处理数组(或者“近似”数组的数据类型)。

还是让我们借着对sample2.asmx.cs修修补补吧:在sample2.asmx.cs中增加一个web方法:

[WebMethod]

public string[] GetArray_1(){

string[] strArr={"乔狗","刘鹏","陈波","张成平","费明","陈刚"};

return strArr;

}

该方法返回一个字符串数组,编译之,在flash的web服务窗口中可以看到

此图片仅显示局部,请点击查看完整图片

该方法返回的数据类型。

下面让我们在AS脚本中处理接受过来的数据:

function GetArray_1(result){

trace("ws方法GetArray_1返回的值为:");

trace("/////////////////////////");

for (var i=0;i<result.length;i++){

trace(i+":"+result[ i ]);

}

}

咳!和本地处理数组一点区别都没有。


实际上,在.net中我们对原始Array数据型用的不多。更多的是使用System.Collections命名空间中的一些较“高级”的数据类型:ArrayList、Hashtable、HybridDictionary等等。在ws+flash交互中,他们的处理和数组类似,不过,在flash也提供了一些复杂的类、API让我们更简单方便的处理这些较复杂的数据类型。

先看一看ArrayList的一个最简单的应用,在sample2.asmx.cs中增加web方法GetArray_2:

[WebMethod(Description="数组的调用:ArrayList")]

public ArrayList GetArray_2(){

ArrayList strArr=new ArrayList();

int i=0;

for (i=0;i<100;i++){

strArr.Add("strArr["+i+"]");

}

return strArr;

}

Flash客户端的处理与处理普通数组无异,就不列出代码了。

此图片仅显示局部,请点击查看完整图片

上面是一个复杂数据的处理实例,如上图所示。

首先来看一看服务器端的实现:首先在sample2.asmx.cs中增加web方法GetArray_3:

[WebMethod(Description="数组的调用,包含对象")]

public Car[] GetArray_3(){

Car HG=new Car("皇冠",2004);

Car JM=new Car("佳美",2003);

Car YK=new Car("雅阁",2004);

Car BJS=new Car("毕加索",2002);

Car[] carArr={HG,JM,YK,BJS};

return carArr;

}

需要注意这里的Car类来自哪里呢?下面是Car类的实现:

[Serializable]

public class Car{

//声明字段model、yearBuilt;

public string model;

public int yearBuilt;


//定义构造器

public Car(string model,int yearBuilt){

this.model=model;

this.yearBuilt=yearBuilt;

}


public Car(){


}

}

千万注意:Car类一定要序列化!!

在浏览器中测试该方法,可以返回下列XML文件

<?xml version="1.0" encoding="utf-8"?>

<ArrayOfCar xmlns:xsd="​​http://www.w3.org/2001/XMLSchema"​​​ xmlns:xsi="​​http://www.w3.org/2001/XMLSchema-instance"​​​ xmlns="​​http://www.dxlschool.com/ws/">​

<Car>

<model>皇冠</model>

<yearBuilt>2004</yearBuilt>

</Car>

<Car>

<model>佳美</model>

<yearBuilt>2003</yearBuilt>

</Car>

<Car>

<model>雅阁</model>

<yearBuilt>2004</yearBuilt>

</Car>

<Car>

<model>毕加索</model>

<yearBuilt>2002</yearBuilt>

</Car>

</ArrayOfCar>

再让我们回到Flash2004,看一看客户端的处理,非常的简单:

function GetArray_3(result){

//定义一个数组接受ws传值

var myDB:Array=result;

//将数组myDB与DataGrid组件gb_main绑定

gb_main.dataProvider=myDB;

}


……


this.dbBind2_bt.onPress=function(){

var op_7:PendingCall=myws.GetArray_3();

op_7.onResult=GetArray_3;

}