如何定时刷新网页内容并在两个DIV之间切换?

问题描述 投票:0回答:1

我对 JavaScript 不熟悉,所以我还在学习中。 在我们的办公室,我们有两台不同的服务器监控我们的网络(文件计数、文件可用性等)。两台服务器每分钟都会生成一个仪表板页面。 我想以 2 分钟的间隔依次查看两个仪表板,并刷新仪表板的内容,而无需刷新整个网页,因为这是在电视上显示的。 我已经将其工作到了两个仪表板以所需的间隔显示的程度,但只有两个仪表板的内容没有被更新/刷新,我不明白为什么。

我使用以下 HTML 创建了一个网页:

<!DOCTYPE html>
<html>
<head>
    <title>Live Update</title>
    <meta charset="UTF-8">
    <link rel="stylesheet" type="text/css" href="style.css">
    <script type="text/javascript" src="autoUpdateVTS.js"></script>
    <script type="text/javascript" src="autoUpdateIDS.js"></script>
    <script type="text/javascript" src="script.js"></script>
</head>
<body>
<div id="VTS">
</div>
<div id="IDS" class="hide">
</div>
</body>
</html>

CSS 仅包含我的 DIV 可见性的数据:

html,
body {
}
#VTS {

}

#IDS {

}

.hide { display: none !important; }

第一个脚本获取第一个仪表板的内容并每 20 秒刷新一次数据:

document.addEventListener("DOMContentLoaded", function()
{
    var xhr = null;

    getXmlHttpRequestObject = function()
    {
        if(!xhr)
        {               
            xhr = new XMLHttpRequest();
        }
        return xhr;
    };

    updateVTS = function()
    {
        var now = new Date();
        var url = 'http://vtc130/hm01/dashboard.htm'; + now.getTime();
        xhr = getXmlHttpRequestObject();
        xhr.onreadystatechange = evenHandlervts;
        // asynchronous requests
        xhr.open("GET", url, true);
        xhr.send(null);
    };

    updateVTS();

    function evenHandlervts()
    {
        // Check response is ready or not
        if(xhr.readyState == 4 && xhr.status == 200)
        {
            dataDiv = document.getElementById('VTS');
            // Set current data text
            dataDiv.innerHTML = xhr.responseText;
            // Update the live data every 20 sec
            setTimeout(updateVTS, 20000);
        }
    }

});

第二个脚本与上面的相同,但从第二个仪表板获取数据并将其放入另一个 DIV 中。

script.js用于切换两个DIV的可见性,间隔2分钟:

window.addEventListener('load', function()
{
    switchVTSIDS = function()
    {
        setInterval(function() {
            VTS.classList.toggle("hide");
            IDS.classList.toggle("hide");
                                }, 120000);
    };

    switchVTSIDS();
});

通过上述设置,两个 DIV 可以根据需要进行切换,但是这两个 DIV 的数据不会自动刷新/更新。 当我打开网页时,会加载 DIV 中的数据,但它们不会自动更新。

希望有人可以帮助我并指出正确的方向。

javascript html xmlhttprequest getelementbyid
1个回答
0
投票

对于可能遇到同样问题的人,我可以使用不同的解决方案来解决此问题:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>VTS en IDS Dashboard</title>
    <style>
        #div1, #div2 {
            div2.display: none; /* Initially hide the second div */
        }
    </style>
</head>
<body>
    <div id="div1">
    </div>
    <div id="div2">
    </div>

    <script>
        let currentDiv = 1; 

        function fetchContent(divId) {
            const fileName = divId === 'div1' ? 'http://vtc130/hm01/dashboard.htm' : 'http://vtc130/hm01/dashboardIDS.htm';

            fetch(fileName)
                .then(response => response.text())
                .then(data => {
                    const div = document.getElementById(divId);
                    div.innerHTML = data; 
                })
                .catch(error => {
                    console.error("Error loading content:", error);
                });
        }

        function switchDivs() {
            document.getElementById('div' + currentDiv).style.display = 'none';

            currentDiv = (currentDiv === 1) ? 2 : 1;

            document.getElementById('div' + currentDiv).style.display = 'block';
        }

        // Initially load content for both divs
        fetchContent('div1');
        fetchContent('div2');

        // Periodically refresh content for both divs every 20 seconds
        setInterval(function() {
            fetchContent('div1');
            fetchContent('div2');
        }, 20000); 

        // Switch visibility every 2 minutes
        setInterval(function() {
            switchDivs();
        }, 120000); 
    </script>
</body>
</html>
© www.soinside.com 2019 - 2024. All rights reserved.