应该感谢那些指出你错误的人

借我三千虎骑,复我泱泱中华!

博客园 首页 新随笔 联系 订阅 管理
在Flash中调用WS时的身份验证_4:数组 

数组可能是各种语言中最常见的一种数据类型了。下面我们来看一看在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;
}
posted on 2006-03-27 22:54  落拓孤鸿  阅读(228)  评论(0编辑  收藏  举报