2017-06-12 150 views
-2

對於一個學校項目,我將電報消息實時寫入JSON文件。現在我想在JSON中添加新消息時更新我的​​HTML。我的HTML與JQuery/Knockout.js一起工作。做這個的最好方式是什麼 ?有沒有辦法從json讀取數據到html實時?

$(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); 
}) 
+1

嗨。請閱讀[問]和[主題](https://stackoverflow.com/help/on-topic),特別是有關家庭作業的部分,並使用[mcve] –

+0

重新編寫代碼,該代碼看起來大致可以。什麼不工作? – ADyson

+0

告訴我們什麼是不工作 –

回答

0

要近實時地進行更新,使用已有代碼的最簡單方法是設置代碼向服務器請求更新數據的時間間隔。這將在區間反覆運行相同的代碼指定:

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

+0

這似乎並不是真的有效,我仍然需要刷新才能看到任何更改。 –

+0

你應該不需要。你能在控制檯看到函數是否每1秒運行一次?它是否在返回新的消息數據?如果你的getJSON函數需要1秒以上的時間才能返回結果,那麼唯一的缺陷就是它可能會有點不同步。 – ADyson

+0

它有效,但有一個問題:每秒鐘都會一遍又一遍地打印新消息。有沒有辦法只能打印一次? –

相關問題