使用 ajax 重新加载部分页面

Reload parts of page with ajax

我正在使用 express 显示 运行 个进程的列表。我希望它们每隔几秒重新加载一次,以删除已完成的并添加新的。

我为此使用 ajax:

我的layout.pug(删节)

div(class="processes")
    for process in processes
         div(class="process")=process.name

  script.
    setInterval(() => {
      $.ajax({
        url: "/processes/running",
        type: "GET",
        success: function(response, status, http) {
          if (response) {
              processes = $('.processes')[0]
              html = ""
              for(process of response){
                html +='<div class="process">'+process.name+'</div>'
              }
              $(processes).html(html)
          }
        }
      });
    }, 3000)

而对应的路线就是

app.get('/processes/running', function(req, res){
    res.send(processes)
})

其中 processes 是我用来跟踪它们的数组。

这很好用。但是,我不喜欢代码重复。我基本上必须在我的代码中构建 list/table 两次。如果我要更改某些内容,我将不得不在两个地方都进行更改...

那么,有没有更好的方法来实现这个目标?

避免重复的一个解决方案就是不初始化你的内部div

div(class="processes")


  script.
    setInterval(() => {
      $.ajax({
        url: "/processes/running",
        type: "GET",
        success: function(response, status, http) {
          if (response) {
              processes = $('.processes')[0]
              html = ""
              for(process of response){
                html +='<div class="process">'+process.name+'</div>'
              }
              $(processes).html(html)
          }
        }
      });
    }, 3000)

div 将在第一次调用后填充。

如果您已经有数据,您可以将“html 创建部分”(if(response) 块)放在一个函数中,并在调用 setInterval 之前调用它,并像现在一样在响应中调用它。 这将允许您将定义数组的代码放在一个地方

如果您还没有数据,我建议在 div 中显示一条消息,例如“还没有数据,请稍候”