一个很有意思的问题
var isOver = false;
var myResult;
function MyProc()
{
//....
//可能时间很长的一段代码
myResult = "...";
isOver = true;
}
function AsynExecute()
{
isOver = false;
setTimeout("myProc();", 10);
var oldTime = <当前时间>
while(! isOver)
{
//alert('ok');
var curTime = <当前时间>
if(curTime - OldTime > 5秒)return "";
}
return myResult;
}
如果加上alert('ok'),网页直接调用AsynExecute()这个函数是可以正常运行的,当MyProc()函数执行时间过长,AsynExecute()会超时终止。
但是去掉alert('ok')就不行了。
其实问题就在于javascript中有没有比较好的方法在MyProc执行后,能够在while循环内立即得到isOver的值。如果你对delphi较熟的话,其实我想找的就是有没有类似与Application.ProcessMessages这样的语句。
我在网上看到有一个sleep函数(见下),用sleep代替alert('ok')也是可以的。不过用sleep函数有个缺点,就是高版本的ie会阻挡模态对话框的运行。
function sleep(numberMillis)
{
var dialogScript = "window.setTimeout(" + " function () { window.close(); }, " + numberMillis + ");";
var result = window.showModalDialog("javascript:document.writeln(" +" '<script>" + dialogScript + "<" + "/script>')");
}
问题点数:20、回复次数:4Top
1 楼yiyioo(天一(一个人的Team))回复于 2006-03-04 20:16:33 得分 20
今天梅大侠就写了个新思路的sleep
这里就有sleep的问题,真是巧啊~`Top
2 楼rony(浮在空中的树)回复于 2006-03-04 20:38:36 得分 0
那个新思路的写法是没有用的,我原来的代码其实有类似的思想Top
3 楼rony(浮在空中的树)回复于 2006-03-06 23:22:10 得分 0
再顶一下。看来真的没有其他方法了!Top
4 楼rony(浮在空中的树)回复于 2006-03-07 23:47:08 得分 0
知道没有答案了,送分Top




