数组可能是各种语言中最常见的一种数据类型了。下面我们来看一看在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-08-20 01:33  榻榻米  阅读(204)  评论(0)    收藏  举报