extJs 2.1学习笔记(通信篇)
ext吧
全部回复
仅看楼主
level 1
javascript通过XHR调用WebService。两个问题必须解决:
     一、如何传值给WebService,有什么格式要求没有?
     二、如何接收从WebService传过来的结果?
     此二者我辈不能不察也。asp.net的WebService默认是序列化成json格式的,所以,我们在客户端传值时,最好用json传,反映到ExtJs中。就是Ext.Ajax.request({url:'xxxx/method',jsonData:{paramName:value,……} ,method:'post',success:function(response,options){……}}) 。这是在ExtJs中进行异步请求的通式。红色部分就是要传的值了。要注意的是,paramName必须与服务器端的那些参数名相同,不然,WebService怎么晓得你传过去的值是给哪个参数的呢?这是个约定。
     下面来研究一下传值的情况:
     一、如果传、收数值类型、整型、数组类型
     这个毫无悬念,只要调用Ext.util.JSON.decode(response.responseText).d 就可以取出来。如果是数组,那么很简单:Ext.util.JSON.decode(response.responseText).d[x] 。
     二、如果传、收的是日期类型
     传过去没什么问题,但是收过来的时候就麻烦了。我试了好久才研究出来。像上面通过:Ext.util.JSON.decode(response.responseText).d 得到的是一个字符串,这个字符串的结构一般是:/Date(1212756402000)/。那个数值据说是UTC时间,我把它取出来传到Date里面来构造日期,结果得到了一个1970的某日,郁闷,事实上应当是2008年6月5日才对。突然,我灵光一闪,asp.net为什么要在数值外面加个 Date()呢,写了如下表达式,结果成功了:
     eval("new "+eval("/Date(1212756402000)/").source)
     结果为:Fri Jun 06 2008 20:46:42 GMT+0800
     正确无误了。eval真是一个好东西啊。
     三、如果传、收的是集合
     对于客户端来说,集合有两种形式,呵呵,这个是在总结JavaScript哦:
     1.数组array[x]
     2.对象成员object.xxxx或object[xxxx]
     传过去很简单,没有悬念。无论WebService中的参数类型为数组还是List<xxxx>。对应在这边都是数组。如果是Dictionary<X,Y>。那么它对应的就是:object了(上面的第二种情况)。
     还是给个代码出来吧,不然,说服力还是不够的:
    Ext.get("btnList").on("click",function(){
         
          var arr=new Array();
          for(var i=1;i<=10;i++) arr.push(i);
         
          Ext.Ajax.request({url:'MyService.asmx/fun5',
                            jsonData:{list:arr},
                            method:'post',

2010年09月06日 13点09分 1
1