1

xhttp オブジェクトが XML ファイルからノード値を読み取り、それらを書き込むスクリプトを含む HTML ページがあります。必要なすべてのノードが読み取られるまで、数値の進行状況インジケーターをパーセンテージで表示したいと考えています(read_rows/total_rows * 100)。しかし、全体が 1 つのスレッドで実行されるため、これを達成することはできません。私が何をすべきかについて何か提案はありますか?

これがJavaScriptコードの一部です-

function fetch(xml_file, index) {

    //create xhttp object, read xml, get nodeValue of element "VALUE" etc...

    xhttp = new XMLHttpRequest();
    xhttp.open("GET", xml_file ,false);
    xhttp.send(null);
    xmlDoc = xhttp.responseXML;
    data = xmlDoc.getElementsByTagName("VALUE")[index].childNodes[0].nodeValue;
    document.write(data);

    // CALCULATE PROGRESS AND WRITE TO SOME OVERLAY DIV...

}

ここにHTMLの一部があります-

<p><script>fetch(data_file, index); index++;</script></p>
<p><script>fetch(data_file, index); index++;</script></p>
<p><script>fetch(data_file, index); index++;</script></p>

すべて<p></p>がいっぱいになると、オーバーレイ DIV など、どこかで進行状況を表示したいと考えています。それを同時に行うにはどうすればよいですか?

4

1 に答える 1

1

コールバック関数を使用することで、xhttp オブジェクトが XML ファイルからデータを読み取っている間、進行状況を表示できました。

コードを次のように変更しました-

function fetch(xml_file, index) {

    //create xhttp object, read xml, get nodeValue of element "VALUE" etc...

    xhttp = new XMLHttpRequest();
    xhttp.open("GET", xml_file ,false);
    xhttp.send(null);
    xmlDoc = xhttp.responseXML;
    data = xmlDoc.getElementsByTagName("VALUE")[index].childNodes[0].nodeValue;
    document.write(data);

    progress(index); //CALLBACK FUNCTION

}

function progress(index) {
    document.getElementById("ProgressString").innerHTML = Math.round((index/358)*100) + "% complete"; // 358 nodes were to be read
}
于 2013-02-20T18:28:51.240 に答える