2015-09-28 152 views
0

我有一个聊天应用程序,它将消息添加到每个用户的阵列中。它设置为每隔一段时间抓取消息,然后将消息打印到客户端窗口。一旦它完成了,它应该从数组中移除消息,所以它将被视为未定义的,不再打印消息。在下面的代码中,我尝试了各种方式来让这个工作没有运气。我试图使用userMessage.user2.pop(),但控制台日志显示唯一弹出的项目是user1的第一个实例,之后它仍然构建数组。 splice()也不起作用。我不明白为什么这不起作用。我已经包括了我认为是唯一必要的代码来找到我的错误:无法删除阵列中的项目

var userMessage = []; 
function getMessages() { 
    window.setInterval(function(userMessage) { 
     var xhr = new XMLHttpRequest(); 
     xhr.open('GET', 'http://localhost:1337/update/', true) 
     xhr.send(); 
     xhr.onload = function() { 
      var json = '{"messages":' + xhr.responseText + '}'; 
      newMessages = JSON.parse(json); 
      userMessage = newMessages['messages']; 
      if (userId == "1") { 
       var i = (userMessage.user2.length) -1; 
       var message = document.createElement('p'); 
       var text = document.createTextNode(userMessage.user2[i]); 
       console.log(text.textContent); 
       if(text.textContent != "undefined"){ 
       message.appendChild(text); 
       chatRoom.appendChild(message); 
       message.scrollIntoView(true); 
       userMessage.user2.splice(-1,1); 
       } 

      } 
      if (userId == "2") { 
       var i = (userMessage.user1.length)-1; 
       var message = document.createElement('p'); 
       var text = document.createTextNode(userMessage.user1[i]); 
       console.log(text); 
       if(text.textContent != "undefined"){ 
       message.appendChild(text); 
       chatRoom.appendChild(message); 
       message.scrollIntoView(true); 
       console.log(userMessage); 
       userMessage.user1.splice(-1,1); 
       } 

      } 
     }; 

    }, 2000); 

*********后端代码******

var messages = { 
    user1 : [], 
    user2 : [] 
}; 
app.get('/random/:room/:userId/:message', function(req, res) { 
    fs.appendFile(room.number.toString(), req.params.message, function(err) { 
     if (err) { 
      console.log('error writing messages to file'); 
     }; 
     fs.readFile('./' + room.number, 'utf-8', function(err, data) { 
      if (err) { 
       if (err.fileNotFound) { 
        return this.sendErrorMessage('can\'t find the file, you linked it incorrectly'); 
       } 
       console.log('error reading message file'); 
      }; 

      if (req.params.userId == 1) { 
       messages.user1.push(data); 
      } else { 
       messages.user2.push(data); 
      }; 
      console.log(messages); 
      res.send(data); 
      fs.unlink(req.params.room, function(err) { 
      }); 

     }); 
    }); 
}); 

app.get('/update', function(req, res){ 
    res.send(messages); 
    message.user1.pop(); 
    message.user2.pop(); 
}); 
+2

每次你的函数运行时,它会进行一次ajax调用,再次检索所有的消息。 (或者不这样做?你没有解释响应的格式是什么,它是否总是包含所有元素,但是URL似乎没有任何限制消息的参数。)在任何情况下,你都会覆盖'userMessage '每次都有最新的回应。** – nnnnnn

+0

它的确如此。我也在后端弹出消息,但是只有在我给res.send后才会发送消息。谢谢。 – Mike

+0

@nnnnnn - 我上面评论过,但我可能是错的。我将使用后端代码更新最初的帖子。 – Mike

回答

0

我在后端使用了错误的变量。它应该是消息,我使用了消息。问题已修复。