我遇到基本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)
此变量已定义,并且仅在提交此函数后才会抛出此变量。