socket.io聊天有问题

时间:2018-01-01 06:08:10

标签: jquery node.js socket.io

我遇到基本socket.io聊天问题。我现在只是尝试将基本文本发送到控制台,但是我似乎无法让它工作。我得到:null,它不发送消息然后清除字段。或者,如果我将id更改为输入而不是表单,我将其更改为不会重新加载整个页面,并且它将从文件本身内的全局变量中抛出未定义的错误,这些错误是明确定义的。

所以这里是后端的socket.io聊天代码:

// Socket stuff
io.on('connection', function (socket) {
  console.log('User Connected');
  socket.on('chat message', function (msg) {
    console.log('message: ' + msg);
  });
});

这是jQuery函数:

  // Handles Chat
  $('#chat').load('chat.ejs', function () {
      $('#chatMessage').submit(function (event) {
        event.preventDefault();

        var msg = $('#chatMessage input[type=text]').val();

        $('chatMessage input[type=text]').val('');

        if (!connected || msg == '') {
          return false;
        }

        socket.emit('chat message', msg);
      });
    });

这是它正在使用的ejs:

<style>
  #messages { list-style-type: none; margin: 0; padding: 0; }
  #messages li { padding: 5px 10px; }
  #messages li:nth-child(odd) { background: #eee; }
</style>
<body>
<ul id="messages"></ul>
<form id="chatMessage" action="">
  <input autocomplete="off" />
</form>

就像它现在一样,当我按下输入时,它将返回null,并且不清除输入中的文本。如果我将id移动到输入而不是表单,它有时会在已定义的全局变量上抛出undefined,或者只是重新加载整个页面而不做任何事情。

编辑: 好吧,我从$('#chat').load()函数中取出了这个函数,并在$(document).ready()之后添加了它,我不确定它是否做了什么,但似乎它正在提交,但它正在重新加载页面整个,而不是发送控制台日志消息来显示消息。

编辑2: 我决定在函数提交后每隔一段时间显示一次它抛出的错误:

ReferenceError: /home/kogadmin/www/views/game.ejs:73
    71|                 <form name="mobget">

    72|                   <select>

 >> 73|                   <% for (var i = 0; i < mobs.length; ++i) { %>

    74|                       <option name="mobs" value="<%= mobs[i].id %>"><%= mobs[i].name %></option>

    75|                   <% } %>

    76|                   </select>


mobs is not defined
    at eval (eval at compile (/home/kogadmin/www/node_modules/ejs/lib/ejs.js:549:12), <anonymous>:59:28)
    at returnedFn (/home/kogadmin/www/node_modules/ejs/lib/ejs.js:580:17)
    at tryHandleCache (/home/kogadmin/www/node_modules/ejs/lib/ejs.js:223:34)
    at View.exports.renderFile [as engine] (/home/kogadmin/www/node_modules/ejs/lib/ejs.js:437:10)
    at View.render (/home/kogadmin/www/node_modules/express/lib/view.js:135:8)
    at tryRender (/home/kogadmin/www/node_modules/express/lib/application.js:640:10)
    at Function.render (/home/kogadmin/www/node_modules/express/lib/application.js:592:3)
    at ServerResponse.render (/home/kogadmin/www/node_modules/express/lib/response.js:1008:7)
    at /home/kogadmin/www/server.js:108:9
    at Layer.handle [as handle_request] (/home/kogadmin/www/node_modules/express/lib/router/layer.js:95:5)

此变量已定义,并且仅在提交此函数后才会抛出此变量。

0 个答案:

没有答案