1

javascriptの実行前にXMLファイルが生成されるようにjavascriptコードに遅延を設定したいと思います。これが私のhtmlコードです

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

このFunc1Delay()関数では、JavaScriptの実行を遅らせるコードを記述しました

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

load()はjavascript関数ですか?コード実行前にxmlファイルが正常に生成されるようにjavascriptコードの実行を遅らせるにはどうすればよいですか?

4

3 に答える 3

1

関数をできるだけ早く実行する必要がありますが、いずれの場合も、xmlが正常に生成された後です。

この場合、(値が正確にわからないため)一定の時間を使用しないようにする必要がありますが、次のことを試してください。

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)

パラメータを関数に渡す必要がある場合は、最初のオプションを使用することはできませんが、簡単に渡すことができる2番目のオプションを使用する必要がありますload(params)

このような関数を渡すと、関数setTimeout(load(),3000)が実行され、loadその戻り値がタイムアウトに渡されます。ただし、3秒後に関数を呼び出して、関数への参照のみを渡す必要があります。

ただし、この方法で関数を実行すると、スコープが異なることに注意してください。

于 2012-12-10T09:25:00.373 に答える
1

これは、文字列を使用したくない場合を除いて、その方法です (loadグローバル スコープで定義された関数が呼び出されている場合は機能しますが)。setTimeout指定されたミリ秒後に関数が呼び出されるようにスケジュールします。

実際の関数参照を与える方が良いです:

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

    function load() {
        // Stuff to do three seconds later
    }
}

それをトリガーするために使用しているイベントonloadof はbody、ページのロード サイクルの非常に遅い段階ですでに発生しているため、待っていることはすべて完了している可能性があることに注意してください。逆に、3 秒以上かかる場合は、十分に待機していない可能性があります。したがって、完了したかどうかを確認できるものがあれば、次のようにポーリングできます。

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);
        }
    }
}
于 2012-12-10T09:25:47.567 に答える
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);
    });
}
于 2012-12-10T10:48:35.770 に答える