如何让一段一般的JS脚本执行在一段异步代码之后?

elmnd 2010-06-11 10:17:00
举个例子:

Ext.onReady(function(){
asym();//这里面有异步操作
});
alert(11);


具体情况是这样子的:页面用异步对一个下拉框赋值, 然后我要取得这个下拉框的值, 进行某些判断操作。
但现在的问题是, 进行判断操作这段JS的优先级比起这段异步的代码优先级要高。
我试过这样做:
<script type="text/javascript" defer="defer">

if(document.getElementById("SELECT/tbTemporaryDispatch/iNetworkType").value=="3"){
document.getElementById("sys").style.display="none";
document.getElementById("circuit").style.display="";
}
else{
document.getElementById("sys").style.display="";
document.getElementById("circuit").style.display="none";
}
</script>

加上延迟标签, 不过, 没用。还是异步的代码在后执行。

求助了~~~
...全文
732 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
fenhl 2011-08-03
  • 打赏
  • 举报
回复
将之后执行的功能

放入setTimeout
elmnd 2010-06-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 theforever 的回复:]
引用 6 楼 elmnd 的回复:
但是我现在需要:异步执行后, 那段JS才执行。


至少有两个方法:

1.异步执行完成,可以通过最后的数据判断已经是执行完毕了(包括向SELECT框里添加数据,应该是边接收边添加的,时间差可以忽略),在这时候再去调用那段JS(可以把它们写到一个函数里供调用)。

2.在JS开头设置一个全局变量。在异步执行完成时标志这个变量为已完成状态。把异步代……
[/Quote]
1不合实际, 数据库慢的情况下, 我遇到过1秒钟才加载到一个SELECT的OPTION.
2这位大哥, 在JS中写死循环???

ps:后来我的做法是像7L的做法, 复制了那份公用的JS代码, 修改了一点点, 在回调部分再赋值。这样实现的, 呵呵。
daiyouqing 2010-06-16
  • 打赏
  • 举报
回复
学习了!
aj3423 2010-06-15
  • 打赏
  • 举报
回复
Ext.onReady 是一个异步, 加上你给下拉框赋值也是个异步,这两个异步不能同时执行
你可以在Ext.onReady里给这个下拉框赋值,然后再调用"判断JS"
Ext.onReady(function(){
下拉框赋值(fucntion() {
asym();
});
});

function 下拉框赋值(callback) {
下拉框.on('赋值', callback);
do异步赋值
}
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 elmnd 的回复:]
但是我现在需要:异步执行后, 那段JS才执行。
[/Quote]

至少有两个方法:

1.异步执行完成,可以通过最后的数据判断已经是执行完毕了(包括向SELECT框里添加数据,应该是边接收边添加的,时间差可以忽略),在这时候再去调用那段JS(可以把它们写到一个函数里供调用)。

2.在JS开头设置一个全局变量。在异步执行完成时标志这个变量为已完成状态。把异步代码下面要执行的那段JS包在一个死循环里,在循环里当检测到那个全局变量为已完成状态时就退出循环,当然,最好在循环里加入延时,否则恐怕真让CPU死掉。
hoojo 2010-06-12
  • 打赏
  • 举报
回复
那就需要用同步,不会在一般没有执行完成的时候。去取数据的得不到的
hoojo 2010-06-11
  • 打赏
  • 举报
回复
可以考虑将异步设为同步。这样数据就有了;
如果异步还没有执行完成,去取值的话。值一般就是空的了;
  • 打赏
  • 举报
回复
asym();//这里面有异步操作

在异步完成后执行你的一般js脚本,就如xhr一样,在状态转换函数中判断readyState为4时才执行。
zoujp_xyz 2010-06-11
  • 打赏
  • 举报
回复
alet 可以在异步成功后执行
zoujp_xyz 2010-06-11
  • 打赏
  • 举报
回复


Ext.onReady(function(){
asym();//这里面有异步操作
});
alert(11);
异步始终都会在alert(11)后执行。
可以这样
alert(11)
Ext.ajax.reuqest({

})

yangxiaonawzy 2010-06-11
  • 打赏
  • 举报
回复
楼主,说明白点行吗
elmnd 2010-06-11
  • 打赏
  • 举报
回复
先谢谢大家顶楼;
大家有遇到这样的情况吗?
在页面加载的时候:
异步对一个下拉框进行赋值;
然后我要取得这个下拉框的值, 进行一些判定操作。

一般情况下:
异步操作进行中的时候, 那写判定操作的JS会执行;
但是我现在需要:
异步执行后, 那段JS才执行。

52,792

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧