JS函数执行顺序控制

youufis 2010-01-25 04:07:20
假如一个网页里有两个JS函数A和B,同时调用A和B时候,有没有什么办法确保A先执行完成才执行B?
说明A函数里有setTimeOut语句。

查了很多资料都没有解决问题,郁闷!!!
...全文
3440 点赞 收藏 19
写回复
19 条回复
dctarh 2010年07月25日
function A(){
this.i=0;
this.b=100;
_this=this;
this._do=function(){_this.check()};
for(var j=0;i<this.b;j++){
framemain.location.href='loading.htm';
setTimeout(_do,1000+j*50);
}

this.check=function(){
this.i++;
if(this.i>=this.b){
B();
}
}
}
回复 点赞
youufis 2010年01月25日
[Quote=引用 14 楼 ltnrain 的回复:]
貌似跨域的1234.htm没有权限访问。。
[/Quote]
只是在框加中打开访问,没问题!
回复 点赞
youufis 2010年01月25日
[Quote=引用 15 楼 licip 的回复:]
谁先调用,谁就先执行,如果是AJAX那就可以设置为同步呀。
[/Quote]
不是谁先调用,谁就先执行
function A()
{

for(i=0;i <100;i++)
{
framemain.location.href='loading.htm'
setTimeout("frametmp.location.href='1234.htm'",1000+i*50);
}

}


function B()
{
framemain.location.href='1234.htm'
frametmp.location.href='loading.htm'

}
比如调用
A();
B();
并不是A()先执行完成,才执行B!
麻烦大家再看清问题,谢谢!!
回复 点赞
youufis 2010年01月25日
如果用两个button分开分别先执行A函数,再执行B函数,没什么问题,但是我想A函数执行完成后马上自动执行B函数,(A函数不执行完成就执行B函数是不行的,)整了几天看了很多网上资料,确实没招了!不知道是不是JS完成不了这样的功能?还是我的想法有问题?楼上有几位说给B一个足够长的时间等待再执行,这个是治标不治本,而且A执行多长时间是一个不确定的因素。帮忙顶一下,如果CSDN的老大都不能解决,我就彻底放弃了!!!!
回复 点赞
licip 2010年01月25日
谁先调用,谁就先执行,如果是AJAX那就可以设置为同步呀。
回复 点赞
草根醉秋意 2010年01月25日
貌似跨域的1234.htm没有权限访问。。
回复 点赞
cloudgamer 2010年01月25日
那应该放在iframe的onload执行
回复 点赞
youufis 2010年01月25日
谢谢大家,我做一个详细说明:


test.htm页面有两个框架framemain(用来显示打开的网页)和frametmp(隐藏的框架,用来临时调入1234.htm网页)
函数a的作用就是在隐藏框架frametmp打开1234.htm网页前在主框架framemain中打开loading.htm
函数b的作用就是当1234.htm在frametmp加载完成了在主框架显示1234.htm,在frametmp打开loading.htm

说明:test.htm和loading.htm是一个域,并和1234.htm是不同域


function A()
{

for(i=0;i<100;i++)
{
framemain.location.href='loading.htm'
setTimeout("frametmp.location.href='1234.htm'",1000+i*50);
}

}


function B()
{
framemain.location.href='1234.htm'
frametmp.location.href='loading.htm'

}


我的问题就是确保A执行完成了(即1234.htm 加载完成)才执行B。
回复 点赞
KK3K2005 2010年01月25日
用callback机制就可以了

吧B函数作为参数传给A函数
由A来控制怎么时候执行 B

如果A里面还有setTimeout 的函数C 则A把执行B的时机交给C 依次类推
回复 点赞
pillar0514 2010年01月25日
var AisFinished = false;
function A(){
setTimeout(function(){
AisFinished = true;
},1000);
}

function B(){
if(AisFinished){
alert(1);
}
}
B();
A();
B();
setTimeout(function(){
B();
},2000);
回复 点赞
yixianggao 2010年01月25日
lz 说滴是 ajax 异步调用么?!

或者说 a 函数需要读取 sever 端数据么?!
回复 点赞
xmliy 2010年01月25日
在b中设置一个足够长的延时,确保b执行的时候a已执行完。或者,在a中设置一个执行结束的标识,在b中定时检查该标志,检测到标志的时候再往下执行
回复 点赞
dh20156 2010年01月25日
只能用回调
回复 点赞
草根醉秋意 2010年01月25日
在函数a里面调用b
回复 点赞
呼吸先生 2010年01月25日
LZ说的确实是一个问题,A没执行完就执行B了,而LZ想要A执行完再执行B而已。
#2楼说的是一个办法。。
回复 点赞
cloudgamer 2010年01月25日
setTimeOut再执行b?
回复 点赞
道光2008 2010年01月25日
A函数里有setTimeOut语句设定一个标志,显示是否a执行完,如果执行玩则setTimeOut执行B,否则执行a
回复 点赞
王集鹄 2010年01月25日
先调谁就是谁
setTimeout一个设置长一个设置断不就好了,,,这也是问题?
回复 点赞
发动态
发帖子
JavaScript
创建于2007-09-28

5.1w+

社区成员

22.3w+

社区内容

Web 开发 JavaScript
社区公告
暂无公告