我想在javascript代码中设置延迟,以便在运行javascript之前生成XML文件。这是我的HTML代码
<body onLoad="Func1Delay()">
<div id="map"></div>
</body>
在这个Func1Delay()函数中,我编写了代码来延迟执行javascript
function Func1Delay()
{
setTimeout("load()", 3000);
}
load()是javascript函数吗?我怎样才能延迟执行javascript代码,以便在代码执行之前成功生成xml文件??
答案 0 :(得分:1)
您希望函数尽快执行,但在 之后已成功生成
。在这种情况下,您应该防止使用固定的时间(因为您不完全知道该值),但请尝试以下操作:
function load(){
if (/*check here if the xml has *not yet* been generated*/){
setTimeout(load,50); // try again in 50 milliseconds
return;
}
// do your stuff here
}
只要您的xml没有准备好,它就会循环播放,并在它可用时立即启动。
关于setTimeout的一般信息:
你可以传递一个字符串,但出于几个原因,这是非常不鼓励的。 而是传递一个函数引用或这样的函数:
// function reference
setTimeout(load,3000) // no `()` !
// function
setTimeout( function(){load()},3000)
如果您需要将参数传递给函数,则不能使用第一个选项,但需要使用第二个选项,您可以轻松地将它们传递给load(params)
。
如果你传递这样的函数:setTimeout(load(),3000)
它执行函数load
并将其返回值传递给超时。但是,您希望在3秒后调用该函数,从而仅将引用传递给函数。
但请注意,如果以这种方式执行函数,则具有不同的范围。
答案 1 :(得分:1)
你就是这样做的,除了你不想使用字符串(虽然它有效 - 只要你有一个在全局范围内定义的load
函数)。 setTimeout
计划在稍后的某个毫秒内调用一个函数。
最好给它一个实际的函数参考:
function Func1Delay() {
setTimeout(load, 3000);
function load() {
// Stuff to do three seconds later
}
}
请注意,您用来触发它的事件onload
body
已经在页面加载周期中确实发生,所以无论您在等待什么,都可能已经完成;相反,如果可能需要超过三秒钟,您可能不会等待足够长的时间。所以,如果有什么东西你可以查看它是否已经完成,你可以像这样进行民意调查:
function Func1Delay() {
check();
function check() {
if (theWorkIsDone) {
// Do something with the work
}
else {
// Check back in 100ms (1/10th of a second)
setTimeout(check, 100);
}
}
}
答案 2 :(得分:1)
好像你的downloadUrl函数提供了一个回调。加载XML后,回调函数会自动触发 。您不需要3秒延迟,只需在回调函数中移动逻辑。像这样:
function Func1Delay() {
downloadUrl("location.xml", function (data) {
var xml = data.responseXML;
// do any thing with xml, it is loaded!
// alert(xml);
});
}