1

これに名前があるかどうかは完全にはわかりませんが、基本的に、db の結果から生成される大きな HTML ページがあります。

そのため、ブラウザーで HTML ページ (レポート) を直接表示しても、すべてのコンテンツがすぐに表示されるわけではなく、内容が表示され、DB からの結果が取得されるときに追加の HTML が追加されます...

この HTML ページに AJAX リクエストを送信し、ページ全体 (レポート) の準備が整うまで待つのではなく、HTML レポートが読み込まれるときに応答の処理を開始する方法はありますか? またはそれを行う別の方法はありますか?

Atm 私は AJAX 応答を作成し、HTML ページが完成するまで 1、2 分そのままにします...

コンテキストが役立つ場合: HTML レポートは Java サーブレットによって生成され、AJAX 呼び出しを行うページは JSP ページです。残念ながら、レポートは BIRT (Eclipse レポート拡張機能) によって生成されるため、簡単に分割することはできません。

前もって感謝します。

4

1 に答える 1

1

誰かが興味を持っているなら、はい、すべてうまくいきます:

client.open("GET", reportUrl, true);
client.onreadystatechange = responseListener;
client.send();

var reportContents = document.getElementById("reportContents");
// Since this could considerably slow browsers for large reports,
// don't edit report contents for every readystate equal to 3.
// Do it every 10.
var batchUpdate = 10;
var responsesSinceUpdate = 0;
// Don't update the whole contents, just add the new stuff
// since the last update.
var currentLengthOfReportHtml = 0;
// Have max recommended length of report before showing warning.
var maxRecommendedReportLength = 500000;

function responseListener()
{
    if (this.status == 200)
    {
        var readyState = this.readyState;

        if (readyState == 3 || readyState == 4)
        {
            var updatePage = false;

            if (readyState == 4)
            {
                updatePage = true;
                var loadingDiv = document.getElementById("reportLoading");
                loadingDiv.innerHTML = "";
                toggleLargeReportWarning(false);
            }
            else
            {
                responsesSinceUpdate++;

                if (responsesSinceUpdate > batchUpdate)
                {
                    updatePage = true;
                    responsesSinceUpdate = 0;
                }
            }

            if (updatePage)
            {
                var reportLength = this.responseText.length;
                reportContents.innerHTML += this.responseText.substring(currentLengthOfReportHtml);
                currentLengthOfReportHtml = reportLength;

                if (reportLength > maxRecommendedReportLength && readyState == 3)
                {
                    toggleLargeReportWarning(true);
                }
            }
        }
    }
}
于 2010-06-03T14:19:45.730 に答える