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;
}

2つの質問:1。setIntervalの代わりにsetTimeoutを使用する必要があると思います。この方法の使用に切り替えるにはどうすればよいですか?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.responseTextreadystatechangeイベントを使用する必要があります:

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