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 执行 |
注册
个人空间
