您现在的位置: 无忧电子商务网 >> 信息学院 >> 程序开发 >> asp.net >> 正文

深度解析ASP.NET2.0中的Callback机制(2)

作者:作者:te…    信息学院来源:网络收集    点击数:    更新时间:2006-8-28 我要参与讨论

       2、WebForm_DoCallback(...)
  
    Ok,明白了以上代码的含义,下面我们来看看,前面的这条“<%= ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context")%>;”在运行时会被解析成什么样子呢?我们只要在页面运行时察看页面源码就可以看到,实际上服务器帮我们生成了下面这段script代码:
  
  <script language="javascript" type="text/javascript">
  function any_script_function()
  {
   WebForm_DoCallback('__Page',arg,ReceiveServerData,context,null,false);
  }
  </script>
  
    这段代码是什么意思呢?很显然的他调用了一个系统与定义的script函数:WebForm_DoCallback。我们要把这个函数找出来看看它具体为我们干了什么。在运行时的页面源码中,我们很容易可以找到这段脚本的出处。我们注意到有一个script,src="/TestCallbackWeb/WebResource.axd?d=HEcYmh-7_szSIu1D_mHSEw2&t=632661779991718750",这里就定义了WebForm_DoCallback。让我们把它用Flashget下载下来,将扩展名改为.js。看看源码吧,没有被混淆的,所以很容易看明白。我这里就只把和callback相关的部分贴出来解释一下,见代码中的注释:
  
  //用于存放所有未完成的callback对象的数组__pendingCallbacks
  var __pendingCallbacks = new Array();
  var __synchronousCallBackIndex = -1;
  
  //回调主函数WebForm_DoCallback
  function WebForm_DoCallback(eventTarget, eventArgument, eventCallback, context, errorCallback, useAsync) {
  
  //构造回调参数,回调参数包括了原来页面上的formpostdata和我们传递的目标控件、eventArgument和部分验证信息
  var postData = __theFormPostData +
  "__CALLBACKID=" + WebForm_EncodeCallback(eventTarget) +
  "&__CALLBACKPARAM=" + WebForm_EncodeCallback(eventArgument);
  if (theForm["__EVENTVALIDATION"]) {
   postData += "&__EVENTVALIDATION=" + WebForm_EncodeCallback(theForm["__EVENTVALIDATION"].value);
  }
  
  //下面实例化XMLHTTP对象,如果浏览器支持XMLHTTP则直接用XMLHTTP执行异步回调
  var xmlRequest,e;
  try {
   xmlRequest = new XMLHttpRequest();
  }
  catch(e) {
   try {
    xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
   }
   catch(e) {}
  }
  var setRequestHeaderMethodExists = true;
  try {
   setRequestHeaderMethodExists = (xmlRequest && xmlRequest.setRequestHeader);
  }
  catch(e) {}
  var callback = new Object();
  callback.eventCallback = eventCallback;
  callback.context = context;
  callback.errorCallback = errorCallback;
  callback.async = useAsync;
  
  //获取对应的回调对象
  var callbackIndex = WebForm_FillFirstAvailableSlot(__pendingCallbacks, callback);
  if (!useAsync) {
   if (__synchronousCallBackIndex != -1

[1] [2] [3] [4] [5] 下一页

在google里搜索更多深度解析ASP.NET2.0中的Callback机制(2)

Google
Web www.51ec.org
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
我来说两句 对此文章发表了评论
  昵 称: *必填    ·注册用户·
  评 分: 1分 2分 3分 4分 5分     严禁发表危害国家安全、政治、黄色淫秽等内容的评论,用户需对自己在使用本网站服务过程中的行为承担法律责任。本站管理员有权保留或删除评论内容,评论内容只代表机友个人观点,与本网站立场无关。  
评 论
内 容

 
评论列表 (最新 评论仅限网友观点!)

供求信息




| 设为首页 | 加入收藏 | 关于我们 | 广告服务 | 联系方式 | 友情链接 | 版权申明