0

在此先感谢您的帮助!我正在使用(并且是超级新手)JavaScript、带有 express 的 node.js 和 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);
    });
});
4

1 回答 1

0

setInterval是在这里使用的合适的东西。

但是,请记住,您将永远不会看到任何消息,因为 AJAX 是异步的,因此req.responseText不会有任何消息。你应该使用一个readystatechange事件:

req.open(......);
req.onreadystatechange = function() {
    if( this.readyState == 4) {
        document.getElementById('messages').innerHTML = this.responseText;
    }
};
req.send();
于 2013-03-17T20:08:43.223 回答