Javascript 使用ajax刷新页面是一种不好的做法吗?

Javascript 使用ajax刷新页面是一种不好的做法吗?,javascript,Javascript,我有一个仪表板,我需要使其动态,以便用户有最新的数据 我的第一个“懒惰”想法是使用ajax调用同一个页面,然后每5秒只更新一些节点元素。以下是一个例子: const interval = setInterval(function() { updateData(); }, 5000); function updateData(){ let xmlhttp; xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatech

我有一个仪表板,我需要使其动态,以便用户有最新的数据

我的第一个“懒惰”想法是使用ajax调用同一个页面,然后每5秒只更新一些节点元素。以下是一个例子:

const interval = setInterval(function() {
   updateData();
 }, 5000);

function updateData(){
    let xmlhttp;
    xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState === 4 && xmlhttp.status === 200){
            let parser = new DOMParser();
            let responseHtml = parser.parseFromString(xmlhttp.responseText, 'text/html');

            // Find div in the response
            let responseData = responseHtml.querySelector(".card-highlight .card-body");
            // Find the same div in the current page and get HTML data
            let currentData = document.querySelector(".card-highlight .card-body").innerHTML;
            
            // Check if the content is not the same
            if (responseData && currentData !== responseData.innerHTML) {
                // Update div with new data
                document.querySelector(".card-highlight .card-body").innerHTML = data.innerHTML
            }
        }
    }
    xmlhttp.open("GET", window.location.href, true);
    xmlhttp.send();
}
这是一个本地仪表板,因此与外部服务器之间没有延迟。我正在刷新页面。这对于我的案例来说非常好,因为我不需要额外的代码,而且我可以在多个页面上完成,而不需要更改后端

每个人都使用特定的端点来返回准备好的数据。但是,当我们只需要刷新时是否有必要

这很简单,对我来说很有效,但是,这是一个坏习惯还是一个坏主意

  • 资源使用
  • 保安

如果您需要完全刷新页面,ajax似乎是错误的工作。如果您只想更新页面的片段,ajax是理想的选择。但是,获取这些片段的理想方法是从只返回这些片段或更新这些片段所需的数据的端点获取。返回一个完整的页面,然后用ajax抓取其中的一部分,有点难闻。角度框架将获取JSON数据以重新呈现所需的元素。哈哈哈,我喜欢你的想法!我想这很好,但是对于客户端(可能还有服务器)来说,要比呈现(准备好的)部分文件稍微贵一些。我看不到任何在正常情况下不会出现的安全问题。@ClémentBaconnier这真的有很大区别吗?我将需要做同样的工作,通过获取数据,以便。。。对于一个表来说,这可能是昂贵的,因为用户将不得不重新呈现大量的行,但除此之外,就像用户多次按F5键一样,这取决于您必须处理的数量。假设您的请求有20db的调用,与您的片段和30k行HTML无关。服务器的使用资源+构建HTML的时间+请求时间+客户端的解析可能不值得。但是如果DB调用的数量没有真正改变,并且你的页面没有那么多内容,我想这没关系。