深入Atlas 系列之客户端支持 2
点击次数:20 次 发布日期:2008-11-26 11:09:07 作者:源代码网
|
源代码网推荐 源代码网推荐 this.invoke第一种调用方式: 源代码网推荐 源代码网推荐 1 this.invoke( 源代码网推荐 2 { 源代码网推荐 3 param1 : value1, 源代码网推荐 4 param2 : value2, 源代码网推荐 5 …… 源代码网推荐 6 }, 源代码网推荐 7 { 源代码网推荐 8 onMethodComplete : ……, 源代码网推荐 9 onMethodTimeout : ……, 源代码网推荐 10 onMethodError : ……, 源代码网推荐 11 onMethodAborted : ……, 源代码网推荐 12 userContext : ……, 源代码网推荐 13 timeoutInterval : ……, 源代码网推荐 14 priority : ……, 源代码网推荐 15 useGetMethod : …… 源代码网推荐 16 }); 源代码网推荐 源代码网推荐 第二种是: 源代码网推荐 源代码网推荐 this.invoke第二种调用方式: 源代码网推荐 源代码网推荐 1 this.invoke( 源代码网推荐 2 { 源代码网推荐 3 param1 : value1, 源代码网推荐 4 param2 : value2, 源代码网推荐 5 …… 源代码网推荐 6 }, 源代码网推荐 7 onMethodComplete, 源代码网推荐 8 onMethodTimeout, 源代码网推荐 9 onMethodError, 源代码网推荐 10 onMethodAborted, 源代码网推荐 11 userContext, 源代码网推荐 12 timeoutInterval, 源代码网推荐 13 priority, 源代码网推荐 14 useGetMethod); 源代码网推荐 源代码网推荐 关于参数的含义,请参照this._invoke函数的分析。 源代码网推荐 源代码网推荐 接下来分析this._invoke的代码,这才是真正工作的代码。 源代码网推荐 源代码网推荐 this._invoke函数分析: 源代码网推荐 源代码网推荐 1 // 参数定义: 源代码网推荐 2 // params:一个Dictionary,用key - value的方式保存即将传递给Web Services的参数 源代码网推荐 3 // onMethodComplete:调用完成时使用的回调函数 源代码网推荐 4 // onMethodTimeout:请求超时时使用的回调函数 源代码网推荐 5 // onMethodError:Web Services发生错误(例如抛出异常)时使用的回调函数 源代码网推荐 6 // onMethodAborted:请求被取消是使用得回调函数 源代码网推荐 7 // userContext:用户提供的任意参数,会在回调函数被执行时作为参数使用 源代码网推荐 8 // timeoutInterval:超时前所等待的时间,Number类型 源代码网推荐 9 // priority:优先级,Sys.net.WebRequestPriority枚举类型 源代码网推荐 10 // useGetMethod:是否使用HTTP GET方法,Boolean类型 源代码网推荐 11 this._invoke = function(params, onMethodComplete, 源代码网推荐 12 onMethodTimeout, onMethodError, onMethodAborted, userContext, 源代码网推荐 13 timeoutInterval, priority, useGetMethod) { 源代码网推荐 14 源代码网推荐 15 // 检测参数类型是否正确 源代码网推荐 16 window.debug.validateParameters("WebMethod.Invoke", arguments, 源代码网推荐 17 [ 源代码网推荐 18 ["params", Object, true], 源代码网推荐 19 ["onMethodComplete", Function, true], 源代码网推荐 20 ["onMethodTimeout", Function, true], 源代码网推荐 21 ["onMethodError", Function, true], 源代码网推荐 22 ["onMethodAborted", Function, true], 源代码网推荐 23 ["timeoutInterval", Number, true], 源代码网推荐 24 ["priority", Number, true], 源代码网推荐 25 ["useGetMethod", Boolean, true] 源代码网推荐 26 ]); 源代码网推荐 27 源代码网推荐 28 // 使用Sys.Net.WebRequest对象进行AJAX请求 源代码网推荐 29 var request = new Sys.Net.WebRequest(); 源代码网推荐 30 源代码网推荐 31 // 使用子类的addHeaders实现添加Header 源代码网推荐 32 this.addHeaders(request.get_headers()); 源代码网推荐 33 // 使用子类的实现set_url实现设置url 源代码网推荐 34 request.set_url(this.get_url(params, useGetMethod)); 源代码网推荐 35 // 使用子类的实现set_appUrl实现设置appUrl 源代码网推荐 36 request.set_appUrl(this.get_appUrl()); 源代码网推荐 37 源代码网推荐 38 // 为了添加body,param不能为null 源代码网推荐 39 if (params == null) { 源代码网推荐 40 params = {}; 源代码网推荐 41 } 源代码网推荐 42 源代码网推荐 43 // 使用子类的set_body实现设置body 源代码网推荐 44 request.set_body(this.get_body(params, useGetMethod)); 源代码网推荐 45 // 将onComplete函数注册给Sys.Net.WebRequest的complete事件 源代码网推荐 46 request.completed.add(onComplete); 源代码网推荐 47 // 将onTimeout函数注册给Sys.Net.WebRequest的timeout事件 源代码网推荐 48 request.timeout.add(onTimeout); 源代码网推荐 49 // 将onAborted函数注册给Sys.Net.WebRequest的aborted事件 源代码网推荐 50 request.aborted.add(onAborted); 源代码网推荐 51 源代码网推荐 52 // 如果提供了timeoutInterval那么设置它 源代码网推荐 53 if (timeoutInterval) { 源代码网推荐 54 request.set_timeoutInterval(timeoutInterval); 源代码网推荐 55 } 源代码网推荐 56 源代码网推荐 57 // 如果priority不是Sys.Net.WebRequestPriority.High的话, 源代码网推荐 58 // 则设置WebRequest的Priority属性 源代码网推荐 59 if (priority >= 0) { 源代码网推荐 60 request.set_priority(priority); 源代码网推荐 61 } 源代码网推荐 62 源代码网推荐 63 // 获得methodName,为后面的onXXXX方法提供信息 源代码网推荐 64 var methodName = this.get_methodName(); 源代码网推荐 65 源代码网推荐 66 request.invoke(); 源代码网推荐 67 源代码网推荐 68 function onComplete(response, eventArgs) { 源代码网推荐 69 …… 源代码网推荐 70 } 源代码网推荐 71 源代码网推荐 72 function onTimeout(request, eventArgs) { 源代码网推荐 73 …… 源代码网推荐 74 } 源代码网推荐 75 源代码网推荐 76 function onAborted(request, eventArgs) { 源代码网推荐 77 …… 源代码网推荐 78 } 源代码网推荐 79 源代码网推荐 80 //返回Sys.Net.WebRequest对象,一般没有什么作用 源代码网推荐 81 return request; 源代码网推荐 82 } 源代码网推荐 源代码网推荐 可以看出,Sys.Net.WebMethod是使用Sys.Net.WebReqeust来发出AJAX请求的。在Atlas应用中如果需要使用AJAX请求的话,应该全部使用Sys.Net.WebRequest,这个类不仅对于XMLHttpRequest进行了良好的封装,另外它使用了Sys.Net._WebRequestManager对于所有请求进行了全局地控制,使用了浏览器和HTTP协议的特性,提高了请求的效率。这一点几乎是微软介绍Atlas时都会着重强调的一点。 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
