赞助连接

赞助连接

阅 读 文 章

在线急等!!!回调函数里面能否加参数的问题

[来源:网上转载 (CSDN转载) | 作者:网友(wzh0324) | 时间:2008-09-12 | 浏览:人次 ]

我的代 *** 想要同时用n个xmlDom对象来解析n个xml文件,为了能让n个解析过程同时进行,因此采用xmlDom异步的方式来处理。具体问题请看代 *** :  
  for(i=0;i<allcol.length;i++)  
  {  
          for(j=0;j<allcol[i].length;j++)  
          {  
  var   arrT   =[];  
  arrT[0]=i;  
  arrT[1]=j;  
                    //LoadRSS函数负责解析xml文件,实现代 *** 在后面,function()为回调函数  
  App.COM.LoadRSS(allcol[i][j],rurls[i][j],arrT,function(){  
          if(App.RDoc   ==   null)  
          {  
  alert("error");  
          }  
          else  
          {  
                                    var   ochannel   =   App.RDoc.getElementsByTagName("channel");  
                  var   otitle   =   ochannel[0].getElementsByTagName("title");  
                                    allhed[j].innerHTML   =   otitle[0].childNodes[0].nodeValue;  
          }  
   
  });  
          }  
  }  
  //LoadRSS函数  
  LoadRSS   :   function(wnd,fpath,arr,callback){  
          var   xmldoc   =   new   ActiveXObject("Msxml2.DOMDocument");  
          xmldoc.onreadystatechange   =   function(){     //状态改变时执行  
                    wnd.innerHTML   =   this.loading;  
  App.RDoc   =   this.CheckRssState(wnd,xmldoc);  
  if(App.RDoc   !=   null)  
  {  
          setTimeout(callback,2);     //执行回调函数  
  }  
          };  
          xmldoc.load(fpath);  
  },  
   
  CheckRssState   :   function   (wnd,xdobj){  
          var   state   =   xdobj.readyState;  
          wnd.innerHTML="数据加载中......";  
          if   (state   ==   4){  
  var   err   =   xdobj.parseError;  
  if   (err.errorCode   !=   0)  
  {  
                  return   null;  
  }  
  else  
  {  
          return   xdobj;  
  }  
          }  
          else  
          {  
  return   null;  
          }  
  }  
   
  上面为主要的实现代 *** 。  
  现在的问题是:由于javascript是解释执行的语言而LoadRSS函数是异步执行的,所以当xmlDom对象返回的结果的时候,即调用App.COM.LoadRSS(allcol[i][j],rurls[i][j],arrT,function(){这句话的funtion(){}部分的代 *** 的时候i和j的下标已经发生变化了,因为App.COM.LoadRSS这句话不是阻塞执行的,外面的两侧循环一直在执行,因此下标发生的变化,所以我的代 *** 就出现了错误。请问各位高手怎么解决这个问题,可不可以给回调函数加上参数,如果可以请给我一个例子,不胜感激!
怎么没有人啊?自己顶!
App.COM.LoadRSS(allcol[i][j],rurls[i][j],arrT,function(i,j){return   function(){  
  if(App.RDoc   ==   null)  
  {  
  alert("error");  
  }  
  else  
  {  
  var   ochannel   =   App.RDoc.getElementsByTagName("channel");  
  var   otitle   =   ochannel[0].getElementsByTagName("title");  
  allhed[j].innerHTML   =   otitle[0].childNodes[0].nodeValue;  
  }  
   
  }}(i,j));
ice_berg16(寻梦的稻草人)   ,非常感谢,问题已经解决了,同时也学会了怎么给回调函数传参数:)
论坛热门帖子: [lch203] 写得蛮好的linux学习笔记(10-21)
[黑马制造] 学习java的30个目标(10-19)
[笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19)
[udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18)
[沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18)
TAG标签: 参数 问题 能否 里面 函数 在线 function var arrT 执行

最新评论 共有0位网友发表了评论

发表评论

评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名:(注册)
密码:
验证码:
匿名发表

网站地图友情连接交流论坛网站投稿广告服务联系我们留言本站长统计
Some rights reserved: www.chmhome.com, 鄂ICP备07010232号 E-mail:chinakafei@live.com,QQ:552766
中国咖啡技术网(Chmhome):国外编程技术书籍,中文编程手册,经典编程文章,交流技术,技术软件下载,计算机论文,毕业论文.