【问题标题】:Is there a way to read data from json to html realtime?有没有办法从json实时读取数据到html?
【发布时间】:2017-11-13 15:04:30
【问题描述】:

对于一个学校项目,我将电报消息实时写入 JSON 文件。现在我想在 JSON 中出现新消息时更新我的​​ HTML。我的 HTML 与 JQuery/Knockout.js 一起工作。最好的方法是什么?

$(document).ready(function(){
var viewModel = function() {
   console.log('test');
   $.getJSON( '/apps/telegram/getmessages', function( data ) {
   //console.log(data["messages"]);
   var jsondata = data["messages"];
   console.log(jsondata);
   for(index = 0; index<jsondata.length; ++ index){
    console.log(jsondata[index]);
    var message = jsondata[index]["message"];
    var firstname = jsondata[index]["first_name"];
    console.log(message);
    $('#messages').append('<p>' + message + '</p>');
    }
})
.error(function(error){
  console.log(error);

    });
}

ko.applyBindings(viewModel);
})

【问题讨论】:

  • 嗨。请阅读How to AskTopics 尤其是关于作业的部分,并使用minimal reproducible example 重新制定
  • 代码看起来基本没问题。究竟是什么不工作?
  • 告诉我们什么不起作用
  • @ADyson 是的,这段代码有效,但不会实时更新我的​​ HTML,它只会在我刷新时更新,这是合乎逻辑的。现在我想实时更新我的​​ HTML

标签: jquery html json knockout.js telegram


【解决方案1】:

要近乎实时地进行更新,利用已有代码的最简单方法是设置代码向服务器请求更新数据的时间间隔。这将按照您指定的时间间隔重复运行相同的代码:

setInterval(function() { 
  console.log('test');
  $.getJSON( '/apps/telegram/getmessages', function( data ) {
    //console.log(data["messages"]);
    var jsondata = data["messages"];
    console.log(jsondata);

    for(index = 0; index<jsondata.length; ++ index){
      console.log(jsondata[index]);
      var message = jsondata[index]["message"];
      var firstname = jsondata[index]["first_name"];
      console.log(message);
      $('#messages').append('<p>' + message + '</p>');
    }
  })
  .error(function(error){
    console.log(error);
  });      
},
1000); //1000 milliseconds (1 second). Change the value to whatever you need.

更多详情请见https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setInterval

【讨论】:

  • 这似乎不起作用,我仍然需要刷新才能看到任何变化。
  • 您不需要这样做。你能在控制台中看到函数是否每 1 秒运行一次吗?它是否返回带有新消息的数据?唯一的缺陷是,如果您的 getJSON 函数需要超过 1 秒的时间才能返回结果,它可能会有点不同步。
  • 它可以工作,但有一个问题:他每一秒都会一遍又一遍地打印新消息。有没有办法只打印一次?
  • 一种方法是让服务器只返回以前没有返回的消息(它会记录下来)。或者另一种方式,可能更健壮一点,是让客户端在发出请求时发送收到的最后一条消息的 ID,这样服务器就会知道只在此之后返回消息。如果你想做一些更复杂的事情,你可以完全放弃这段代码并考虑使用 WebSockets,这样服务器一收到消息就可以更容易地将消息“推送”到客户端。
  • 谢谢,我去找插座了。
猜你喜欢
  • 1970-01-01
  • 2017-12-09
  • 1970-01-01
  • 2019-04-04
  • 2014-07-22
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 2012-06-22
相关资源
最近更新 更多