提前感谢您的帮助!我正在使用(和超级新的)JavaScript,node.js with express和sqlite3。我正在尝试发出一个AJAX请求,以获取已发布到聊天室页面的所有消息的列表:
var meta = document.querySelector('meta[name=roomName]');
var roomName = meta.content;
window.addEventListener('load', function(){
var intervalID = setInterval(updateMessages, 4000);
}, false);
function updateMessages() {
var req = new XMLHttpRequest();
req.open('GET', '/' + roomName + '/messages.json', true);
req.send();
document.getElementById('messages').innerHTML = req.responseText;
}
两个问题:1。我认为我应该使用setTimeout而不是setInterval。我将如何切换到使用此方法? 2.下面的服务器端代码是否与上述代码对应?如何访问此请求后返回的数据?
app.get('/:roomName/messages.json', function(request, response){
var roomName = request.params.roomName;
var sql = "SELECT ALL body FROM messages where room="+roomName+";";
conn.query(sql, function(error, result) {
if(error) {
console.log("There was an error.");
}
response.send(result);
});
});
答案 0 :(得分:0)
setInterval
是适合在这里使用的东西。
但是,请记住,您永远不会看到任何消息,因为AJAX是异步,因此req.responseText
将没有任何内容。您应该使用readystatechange
事件:
req.open(......);
req.onreadystatechange = function() {
if( this.readyState == 4) {
document.getElementById('messages').innerHTML = this.responseText;
}
};
req.send();