想在javascript中设置延迟

时间:2012-12-10 09:23:38

标签: javascript html

我想在javascript代码中设置延迟,以便在运行javascript之前生成XML文件。这是我的HTML代码

<body onLoad="Func1Delay()">
<div id="map"></div>
</body>

在这个Func1Delay()函数中,我编写了代码来延迟执行javascript

function Func1Delay()
    {
    setTimeout("load()", 3000);
    }

load()是javascript函数吗?我怎样才能延迟执行javascript代码,以便在代码执行之前成功生成xml文件??

3 个答案:

答案 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);
    });
}