扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
1 Sys.Net.WebMethod = function() { 2 //抽象成员定义 3 this.addHeaders = Function.abstractMethod; 4 this.get_appUrl = Function.abstractMethod; 5 this.get_url = Function.abstractMethod; 6 this.get_body = Function.abstractMethod; 7 8 //最后这个定义是我补上的,很明显代码里缺少了这个定义 9 this.get_methodName = Function.abstractMethod; 10 11 this.invoke = function(params) { 12 …… 13 } 14 15 this._invoke = function(params, onMethodComplete, onMethodTimeout, 16 onMethodError, onMethodAborted, userContext, timeoutInterval, priority, useGetMethod) { 17 18 …… 19 20 function onComplete(response, eventArgs) { 21 …… 22 } 23 24 function onTimeout(request, eventArgs) { 25 …… 26 } 27 28 function onAborted(request, eventArgs) { 29 …… 30 } 31 32 …… 33 } 34 } 35 Sys.Net.WebMethod.registerAbstractClass('Sys.Net.WebMethod'); |
1 // 参数params是一个Dictionary,用key - value的方式 2 // 保存即将传递给Web Services的参数 3 this.invoke = function(params) { 4 var numOfParams = arguments.length; 5 6 // 如果有两个参数,并且第二个参数不是一个函数, 7 // 则说明函数调用时参数是这样的: 8 // this.invoke(params, settings); 9 if (numOfParams == 2 && arguments[1] && typeof(arguments[1]) != 'function') { 10 11 // 构造一个数组,用于获得每个key的index 12 var expectedParamNames = 13 ["onMethodComplete", "onMethodTimeout", "onMethodError", 14 "onMethodAborted", "userContext", "timeoutInterval", 15 "priority", "useGetMethod"]; 16 17 // 传入的第二个参数settings 18 var paramContainer = arguments[1]; 19 20 // 将要传递给this._invoke函数的参数数组 21 var newParams = new Array(expectedParamNames.length + 1); 22 // 第一个参数就是params 23 newParams[0] = params; 24 25 // 枚举settings的每个key 26 for (var paramName in paramContainer) { 27 // 由于传递给this._invoke时参数需要按照顺序顺序, 28 // 所以必须获得当前key的index。 29 var index = expectedParamNames.indexOf(paramName); 30 31 // 如果setting里有个key是不需要的,那么抛出Error 32 if (index < 0) { 33 throw Error.createError( 34 String.format( 35 "'{0}' is not a valid argument. It should be one of {1}", 36 paramName, expectedParamNames 37 ) 38 ); 39 } 40 41 // 将参数放在数组合适的位置上 42 newParams[index + 1] = paramContainer[paramName]; 43 } 44 45 // 将准备好的参数数组传递给this._invoke调用 46 return this._invoke.apply(this, newParams); 47 } 48 49 // 还有一种调用方式的参数和this_invoke的参数完全相同 50 return this._invoke.apply(this, arguments); 51 } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者